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#:
Saludos
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 (vbnet) [Seleccionar]
Private Sub RtbEditor_KeyUp(sender As Object, e As KeyEventArgs) _
Handles RtbEditor.KeyUp
Me.UpdateStatusBarInfo(DirectCast(sender, RichTextBox))
End Sub
Private Sub UpdateStatusBarInfo(ByVal rtb As RichTextBox)
Dim lineIndex As Integer = rtb.GetLineFromCharIndex(rtb.SelectionStart)
Dim colIndex As Integer = (rtb.SelectionStart - rtb.GetFirstCharIndexFromLine(lineIndex))
TsLblLine.Text = Convert.ToString(lineIndex)
TsLblCol.Text = Convert.ToString(colIndex)
End Sub
C#:
Código (csharp) [Seleccionar]
private void RtbEditor_KeyUp(object sender, KeyEventArgs e)
{
this.UpdateStatusBarInfo((RichTextBox)sender);
}
private void UpdateStatusBarInfo(RichTextBox rtb)
{
int lineIndex = rtb.GetLineFromCharIndex(rtb.SelectionStart);
int colIndex = (rtb.SelectionStart - rtb.GetFirstCharIndexFromLine(lineIndex));
TsLblLine.Text = Convert.ToString(lineIndex);
TsLblCol.Text = Convert.ToString(colIndex);
}
//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================
Saludos