2013-08-08 16 views
7

Ich habe eine RichTextBox mit Tausenden von Zeilen Text darin. Ich kann SET leicht die erste sichtbare Zeile von ScrollToCaret() mit, indem Sie ...Get/Set Erste sichtbare Zeile von RichTextBox

this.SelectionStart = this.Find(this.Lines[lineIndex], RichTextBoxFinds.NoHighlight); 
this.ScrollToCaret(); 

Aber ich mag auch zu GET der ersten sichtbaren Zeile der Lage sein. Irgendwelche Vorschläge?

+1

Wie Sie Konzept eine 'Linie'? endet mit einem Zeilenumbruch? oder nur die Zeile, die entsprechend der 'Width' der' RichTextBox' gerendert werden kann? –

+0

Ich hätte klarer sein sollen: meine Entschuldigung. Ich beziehe mich auf die erste Linie, die entsprechend der 'Breite' der' RichTextBox' gerendert wird. –

+0

Ok, ich habe meine Antwort mit Ihrer Anforderung aktualisiert –

Antwort

11

Hier kann das sein, was Sie brauchen:

//get the first visible char index 
int firstVisibleChar = richTextBox1.GetCharIndexFromPosition(new Point(0,0)); 
//get the line index from the char index 
int lineIndex = richTextBox1.GetLineFromCharIndex(firstVisibleChar); 
//just get the string of the line 
string firstVisibleLine = richTextBox1.Lines[lineIndex]; 

Für Ihren Kommentar zu sagen, dass Sie eine Linie entsprechend der Width der RichTextBox möchten, können Sie etwas tun können:

int firstVisibleChar = richTextBox1.GetCharIndexFromPosition(new Point(0,0)); 
int lastChar = richTextBox1.GetCharIndexFromPosition(new Point(richTextBox1.ClientSize.Width - 1, 1)); 
string firstVisibleLine = richTextBox1.Text.Substring(firstVisibleChar, lastChar - firstVisibleChar); 
+1

Ich fand, dass ich die folgende Zeile vor dem Aufruf von 'RichTextBox1.GetLineFromCharIndex (FirstVisibleChar)' in King Kongs Antwort einfügen musste: richTextBox1.WordWrap = false; – Maverik