W języku C # mam RichTextBox i chcę uzyskać bieżącą linię kursora. Każda odpowiedź, którą znalazłem, mówi:
int currentLine = richTextBox1.GetLineFromCharIndex(richTextBox1.SelectionStart);
Jednak richTextBox1.SelectionStart aktualizuje się tylko po wprowadzeniu zmian w tekście. Przesunięcie kursora za pomocą klawiszy strzałek nie powoduje aktualizacji (zweryfikowałem to, drukując SelectionStart podczas poruszania się).
Jak uzyskać bieżącą linię kursora w sposób, który ją śledzi, nawet jeśli poruszasz kursorem za pomocą klawiszy strzałek?
Używam VS2012 w Win8.
Edytować: Odpowiedź terrybozzio pokazała problem. Dla każdego, kto ma ten problem, nie możesz umieścić kodu w richTextBox1_TextChanged. Musisz umieścić go w richTextBox1_SelectionChanged.
Odpowiedzi:
4 dla odpowiedzi № 1Najpierw musisz zacząć selekcję, jeśli istniejenie jest dowolny zaznaczony tekst, zwracana wartość to pozycja karetki (z przesunięciem znaków od początku tekstu), a następnie wywołujesz getlinefromcharindex i przekazujesz tę wartość, umieszczasz ją w zdarzeniu zmienionym zaznaczeniem, a nawet używając klawiszy strzałek przesuwających pozycję karetki zaktualizuje:
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
int index = richTextBox1.SelectionStart;
int line = richTextBox1.GetLineFromCharIndex(index);
label1.Text = "cursor at line " + line.ToString();
}