Grüße,
Ich hätte mal eine Frage:
Ich möchte in einer TreeViwe eine Leiste haben, welche mir Zeilen Nummer darstellt.
Der Baum welcher in der TreeViwe angezeigt wird, stellt den Inhalt einer XML-Datei da. Die Zeilen-Nummer stellt die Zeile des Elements im Dokument dar. Je nach dem wie viele Elemente aufgeklappt werden, werden mehr oder weniger Zeilen-Nummern angezeigt.
So meine Vorstellung.
Wie Zeichne ich diese Leiste in die TreeViwe rein? Oder gibt es sowas schon?
MfG.
Grüße,
Danke für den Tipp ich kuck es mir an.
Im Anhang ist es Bild, wie ich es mir vorstelle.
Mfg.
OK, also als eigenes Control (z.B. Panel
) könntest du dies auch umsetzen. Dazu dann bei jedem AfterCollapse/AfterExpand-Ereignis ein Neuzeichnen, z.B. per Invalidate()
, anstoßen.
Und dann (abhängig von der Scrollbar) bei TopNode beginnen und durch die Knoten des TreeView
iterieren (entsprechend IsExpanded ), und mit gleichem Font die Zeilennummern zeichnen, damit die Höhe paßt - s.a. [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox).
Du kannst dies auch als ein UserControl
umsetzen, das beide Controls beinhaltet (und z.B. bei Größenveränderung korrekt reagiert).
Insgesamt ist dies etwas langsamer als direkt im TreeView zu zeichnen, da 2x iteriert wird, aber dafür muß man nicht selber das Zeichnen des TreeViews übernehmen (bzw. anstoßen).
Edit: Es gibt kein OnScroll
-Ereignis beim TreeView
, daher müßtest du mit einem Timer
überprüfen, ob sich TopNode
geändert hat (und dann ebenfalls ein Neuzeichnen veranlassen).
Edit2: Wenn man von TreeView
ableitet, kann man auf das Scrollen reagieren: [RESOLVED] Trapping TreeView's Scroll Events?
So mußt du jetzt selber entscheiden, welcher Ansatz für dich einfacher umzusetzen ist.