Zeilennummer bzw. Spaltennummer...

azok

Grünschnabel
hallo!

Weiß jemand von euch, wie ich (so wie im Notepad unter Windows) die aktuelle Cursorposition herausfinden kann, also die Position des Cursors in einer RichTextBox. Ich schaffe es bisher nur die Koordinaten des Mauszeigers zu ermitteln. - Nicht aber die Spalten- u. Zeilennummer. Wie könnte das funktionieren?

Und als zweites Problem: Wie kann man die Zeilen der RTB durchnummerieren. - Jemand hat mir zu GDI+ geraten, aber ich finde keine wirklich gute Hilfe dazu...

danke schon im Voraus
mlg
azok
 
Ich würde einfach mal auf das Ereignis "KeyDown" oder "KeyUp" losgehen.
Da bekommst Du die absolute Zeichen-Nummer mit:
Code:
  int zeichen=richTextBox.SelectionStart;
Mit der Hilfe dieses Wertes kommst Du auch auf die Zeilen-Nummer:
Code:
  int zeile=richTextBox.GetLineFromCharIndex(zeichen);
Vielleicht ist Dir das schon eine kleine Hilfe, denn wie man jetzt ermitteln kann,
das wievielte Zeichen das in der ermittelten Zeile ist, weis ich nicht. :-(

Gruss

Mobix
 
Danke für eure Antworten!

Während ich mich nun daran gemacht habe, das ganze über die (das) Ereignis(se) KeyDown/KeyUp "festzulegen" ist mir dabei ein Problem eingefallen, für das ich noch keine Lösung habe, nämlich. - Das ganze spielt sich in einer MDI Anwendung ab, bei der ich den Code nun in das Kind-Formular geschrieben habe. - Nun soll aber je nach aktivem Kind-Formular die aktuelle CursorPosition (also Zeile/Spalte) in einem StatusStripPanel erscheinen. - Den StatusStrip habe ich auf dem Eltern-Formular platziert. Mir fehlt es demnach (noch) an der Möglichkeit (da ich in c# erst fortgeschrittener Anfänger bin) diese Daten in den StatusStrip zu 'senden'. - Meine Frage daher: Muss ich den Wert von der Variable zunächst an das ElternFormular übermitteln, und von dort in den StatusStrip schreiben? (mit welchem Ereignis)? oder geht das sonst irgendwie anders?

danke schon im Voraus für eure Antworten!
mlg
azok
 
Bezüglich Zeile meinte ich natürlich das Anzeigen von Zeilennummern in der Box, nicht das Herausfinden einer Zeilennummer.
 
Hallo azok,
am einfachsten ist es, wenn Du Deine RichTextBox in deinem Child-Form als public
setzt. Dann kannst Du die Ereignisse KeyUp und KeyDown vom Parent-Form aus abonnieren.
Code:
private void DateiNeu(object sender, System.EventArgs e)
{
MDI_Child newMDIChild = new MDI_Child();
newMDIChild.MdiParent = this;
newMDIChild.richTextBox1.KeyDown +=new KeyEventHandler(this.MDIKeyEvent);
newMDIChild.richTextBox1.KeyUp +=new KeyEventHandler(this.MDIKeyEvent);
//.....
newMDIChild.Show();
}
.....
private void MDIKeyEvent(object sender, System.Windows.Forms.KeyEventArgs e)
{
int zeichen=((RichTextBox)sender).SelectionStart;
int zeile=((RichTextBox)sender).GetLineFromCharIndex(zeichen);
// ....
// und dann z.B. statusTextBox.Text="Z:" + zeichen.ToString() + "L:" zeile.ToString();
}

Allerdings solltest Du auch noch das Ereignis "Activated" abonnieren, damit bei einem
Wechsel zwischen zwei MDI-Childs die Position auch aktualisiert wird.

Gruss

Mobix
 

Neue Beiträge

Zurück