elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  DUDA Labels RichTextBox C# 2012. NET
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: DUDA Labels RichTextBox C# 2012. NET  (Leído 2,532 veces)
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
DUDA Labels RichTextBox C# 2012. NET
« en: 29 Mayo 2016, 07:17 am »

Hola soy yo de nuevo para molestarlos.

Estoy haciendo un editor de texto, resulta que quiero que cuando digito en el richtextbox o el usuario digite en él , en la parte de abajo  sea cualquier tecla se muestre el número de columna y fila ACTUALIZADO en sus respectivos labels del control (control Status Strip) , esto lo subrayo ya que cuando presiona la tecla debo presionarla dos veces para que muestre el dato actualizado, en fin pude lograr hacerlo pero no de la mejor manera, ya que cuando lo realizo se muestra pero algo atrasado, digamos que marco la flechita arriba, abajo, enter pero aveces sigue mostrando la línea anterior y no comprendo por que sinceramente.


Les adjunto mi códido este es el método, donde RH es el richtextbox y TS son los labels del Status Strip.

Código
  1.  
  2. private void actualizar_lineas(){
  3.  
  4.            //Actualiza el número actual de la línea
  5.            int int_line = 0;
  6.            int int_column = 0;
  7.  
  8.            RH_Editor.DeselectAll();
  9.            int_line = 0;
  10.            TS_Linea.Text = "";
  11.  
  12.            int_line = RH_Editor.GetLineFromCharIndex(RH_Editor.SelectionStart);
  13.            TS_Linea.Text = int_line.ToString();
  14.            Update();
  15.  
  16.            RH_Editor.DeselectAll();
  17.            int_column = 0;
  18.            TS_Columna.Text = "";
  19.  
  20.            int_column = RH_Editor.SelectionStart - RH_Editor.GetFirstCharIndexFromLine(int_line);
  21.            TS_Columna.Text = int_column.ToString();
  22.            Update();
  23.  
  24.  
  25.  
  26.        }
  27.  
  28.  


Y este es el evento keydown

Código
  1.  
  2.  if (e.KeyData == Keys.Left || e.KeyData == Keys.Up || e.KeyData == Keys.Down || e.KeyData == Keys.Right  ){
  3.  
  4.  
  5.                TS_Linea.Text = "";
  6.                TS_Columna.Text = "";
  7.                Update();
  8.                actualizar_lineas();
  9.  
  10.            }
  11.  
  12.            else{
  13.  
  14.                TS_Linea.Text = "";
  15.                TS_Columna.Text = "";
  16.                Update();
  17.                actualizar_lineas();
  18.  
  19.            }
  20.  
  21.  


Bien, lo hice así para ver si fuerzo que haga la actualización pero sigue igual, entonces no se que podrá ser.

Les agradecería mucho.


« Última modificación: 29 Mayo 2016, 07:23 am por Yaldabaot » En línea

Nunca me contestan -_-
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: DUDA Labels RichTextBox C# 2012. NET
« Respuesta #1 en: 29 Mayo 2016, 14:33 pm »

Lo que ocurre es que estás controlando el evento inadecuado, en el evento RichTextBox.KeyDown NO se desplaza el caret, por ende, estás intentando obtener una información (índice de columna/linea) que todavía no ha sido asignada a la nueva posición del caret.

Aparte de eso, no es buena idea que llames al método Form.Update() o RichTextBox.Update() en cada pulsación, es innecesario y muy expensivo, además, en cualquier caso el método que deberías llamar debería ser StatusStrip.Update().

¿La solución?, controlar el evento RichTextBox.KeyUp:

VB.NET:
Código
  1.    Private Sub RtbEditor_KeyUp(sender As Object, e As KeyEventArgs) _
  2.    Handles RtbEditor.KeyUp
  3.        Me.UpdateStatusBarInfo(DirectCast(sender, RichTextBox))
  4.    End Sub
  5.  
  6.    Private Sub UpdateStatusBarInfo(ByVal rtb As RichTextBox)
  7.        Dim lineIndex As Integer = rtb.GetLineFromCharIndex(rtb.SelectionStart)
  8.        Dim colIndex As Integer = (rtb.SelectionStart - rtb.GetFirstCharIndexFromLine(lineIndex))
  9.  
  10.        TsLblLine.Text = Convert.ToString(lineIndex)
  11.        TsLblCol.Text = Convert.ToString(colIndex)
  12.    End Sub

C#:
Código
  1. private void RtbEditor_KeyUp(object sender, KeyEventArgs e)
  2. {
  3. this.UpdateStatusBarInfo((RichTextBox)sender);
  4. }
  5.  
  6. private void UpdateStatusBarInfo(RichTextBox rtb)
  7. {
  8. int lineIndex = rtb.GetLineFromCharIndex(rtb.SelectionStart);
  9. int colIndex = (rtb.SelectionStart - rtb.GetFirstCharIndexFromLine(lineIndex));
  10.  
  11. TsLblLine.Text = Convert.ToString(lineIndex);
  12. TsLblCol.Text = Convert.ToString(colIndex);
  13. }
  14.  
  15. //=======================================================
  16. //Service provided by Telerik (www.telerik.com)
  17. //=======================================================

Saludos


« Última modificación: 29 Mayo 2016, 14:37 pm por Eleкtro » En línea



Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: DUDA Labels RichTextBox C# 2012. NET
« Respuesta #2 en: 29 Mayo 2016, 21:16 pm »

Gracias Elektro!!!, solucionado!!.
En línea

Nunca me contestan -_-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Matriz de Labels
Programación Visual Basic
CsarGR 1 3,762 Último mensaje 19 Diciembre 2005, 18:55 pm
por NYlOn
duda con un richtextbox
Programación Visual Basic
ricardovinzo 3 1,789 Último mensaje 9 Junio 2008, 21:39 pm
por CeLaYa
Duda con RichTextBox en VB.NET
.NET (C#, VB.NET, ASP)
Debian21 5 6,386 Último mensaje 14 Mayo 2009, 23:17 pm
por Dessa
Duda sobre RichTextBox
.NET (C#, VB.NET, ASP)
CH4ØZ 2 2,365 Último mensaje 30 Octubre 2011, 04:07 am
por CH4ØZ
Duda sobre seleccionar palabra por palabra en RichTextBox (vb.net)
.NET (C#, VB.NET, ASP)
Susoch 3 7,105 Último mensaje 19 Enero 2012, 18:15 pm
por Susoch
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines