Hallo,
ich wollte einen Zeilenzähler in mein Programm einbauen. Ich weiss nicht genau wie man das nennt, aber links neben der Textbox steht dann die jeweilige Zeile.
Hier ist ein Bild von dem, was ich meine 🙂
Siehe Anhang
Meine Idee war, einen Backgroundthread zu erstellen, der die ganze Zeit textbox.Lines.GetLength(0) überprüft. Wenn die Anzahl der Zeilen > 0 ist, dann wird diese Anzahl gespeichert und irgendwas erstellt, dass die Zeilenummer angibt, vielleicht ein Label mit der Zahl oder so, da weiss ich noch nicht, wie ich das anstellen soll.
Jedenfalls wenn die Zeilenanzahl größer wird als der gespeicherte Wert, so wird dieser mit der neuen größeren Zahl überschrieben. Und immer wenn das der Fall ist, werden neue Labels erstellt, die die Zeilennummer anzeigen. Somit springt der Mechanismus nur an, wenn eine neue Zeile angelegt wird und nicht, wenn vorhandene Zeilen gelöscht werden.
Das war meine Idee, um die Zeilenanzahl festzustellen, allerdings habe ich nicht die geringste Ahnung, wie ich das mit Zeilennummer-Labels machen soll. Da die mitscrollen müssen, müssen sie ein Teil der Textbox werden, jedenfalls bin ich da ratlos 🙂
Grüße
in jedem fall der falsche weg....
ganz einfach:
du machst eine eigene textbox, die am anfang der jeweiligen zeile einfach die zeilennummer zeichnet und die eingabe "area" einfach ein stückchen weiter nach rechts gerückt ist. evtl gibt es sowas schon auf codeproject... musst mal shcauen...
ist doch eazy 😉
auf der textbox einfach ein TextChanged Event hinzufügen und diesen code dort einsetzen 😉
private void on_text_change(object sender, EventArgs e)
{
label1.Text = System.Convert.ToString(textBox1.Text.Length);
}
achja... den rest machst du einfach mit einer if abfrage und die zwischenergebnisse "zählerstände" in eine globale variable speichern
Liebe, Lebe, Lerne, Lache | Aldo-Giese.de Blog | Ohloh
ich bezweifel das er mit dieser methode das bekommt was er möchte.
Hrm, du könntest anhand des Textes durchgehen und nach "\n" suchen.
Bei jedem "\n" weist du dann das eine neue Zeile kommt.
Anschließend würde ich mir ein UserControl basteln: Mit einen TableLayoutPanel die TextBox einfügen und nebendran nen normales Panel mit einer einer dynamischen Breite. Im Panel würde ich dann die OnPaint überschreiben und dort mit der Scroulbar bewegung von der TextBox die jeweilige zeile die ich gesucht habe an die entsprechende visuelle Stelle hinmalen.
Die TextBox selbst an einer bestimmten Stelle zu übermalen würde glaube ich mehr Zeit in Anspruch nehmen, da man hierfür den ClibBound Bereich vom ClientRectangle versetzen müsste und ich denke das geht insgesammt länger.
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
nein das geht eigendlich ...
beispiel: wie ich gesagt habe auf codeproject
extra controls zu erschaffen und das verhalten an die der textbox zu binden etc.. ist ein wenig oversized für diese einfache anforderung.
Hrm, stimmt auch wieder bei CodeProject Suchen und rumkopieren geht schneller 😉
In der LineNumber.cpp in der CLineNumberStatic:👍nPaint() Methode kann man quasi alles fast 1 zu 1 rauskopieren und minimal anpassen. Bzw. über www.pinvoke.net die entsprechenden DllImports reinkopieren.
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(