Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

416
Views
¿Cómo evito que RichTextBox salte a la parte superior del documento cuando se hace clic en los enlaces?

Como parte de mi GUI en C# (.Net 5.0), estoy usando el control RichTextBox (parte de System.Windows.Forms) para mostrar texto y enlaces en los que se puede hacer clic. Mi problema es cuando hago clic en cualquier enlace incluido sin que el formulario tenga primero el foco, el acto de hacer clic en un enlace también enfoca el cuadro de texto que automáticamente coloca el signo de intercalación al comienzo del texto, esto tiene el efecto de hacer que el cuadro de texto salte (o se desplace) hasta la parte superior del documento, perdiendo la posición.

Para mi problema particular, las clases de RichTextBox se asignan a TabPages dentro de un TabControl, y estos tres componentes se crean en respuesta a la interacción del usuario (comprendí que la creación de estos en tiempo de ejecución podría limitar los tipos de manejo de eventos disponibles para mí).

He definido el control RichTextBox con varias líneas y barras de desplazamiento horizontales y verticales, y para habilitar los enlaces en los que se puede hacer clic estoy usando la opción DetectUrls . Aquí está la lista completa de propiedades que se utilizan.

 var control = new RichTextBox(); control.DetectUrls = true; control.Dock = DockStyle.Fill; control.Multiline = true; control.ReadOnly = true; control.WordWrap = false; control.Text = myContent; // large content filling multiple screens control.ScrollBars = RichTextBoxScrollBars.Both; control.LinkClicked += new LinkClickedEventHandler(RichTextBoxLinkClicked);

Incluí LinkClicked porque quiero proporcionar alguna interacción para el usuario, pero si este controlador está asignado o no, no parece influir en el problema.

Edit1 Se me ocurrió una solución que funciona hasta cierto punto; evita el desplazamiento colocando el signo de intercalación al principio del enlace (aunque no funciona bien si hay más de uno del mismo enlace)

 private void RichTextBoxLinkClicked(object sender, LinkClickedEventArgs e) { int caret = ((RichTextBox) sender).Text.IndexOf(e.LinkText); SelectionStart = caret; }

Edit2 Una segunda solución que encontré es establecer el foco del cuadro de texto en un evento MouseEnter . He llegado a pensar que la clave del problema es establecer el foco de los cuadros de texto antes de que tenga lugar cualquier interacción con el usuario, pero tengo problemas para encontrar una manera satisfactoria de lograrlo.

over 4 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!