Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

419
Visualizações
¿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
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda