Probleme mit TreeView.DrawNode - OwnerDrawText

8

Ich habe eine App, die mit einem Remote-Server verbunden ist und Daten abfragt, wenn sie benötigt werden. Es hat eine TreeView, wo die Knoten die verfügbaren Objekte darstellen und die Farbe des Textes anzeigt, ob die Daten geladen wurden oder nicht; grau-kursiv bedeutet nicht geladen, schwarz, normaler Text ist geladen.

Zur Zeit habe ich die TreeView auf OwnderDrawText eingestellt und lasse die TreeView.DrawNode Funktion einfach den Text so zeichnen:

%Vor%

Ich dachte, das wäre genug, aber das hat einige Probleme verursacht;

  1. Wenn ein Knoten ausgewählt ist, fokussiert oder nicht, umschließt er nicht den gesamten Text, Beispiel (ich hoffe, ich bin imgur ist ok).
  2. Wenn der Knoten fokussiert ist, wird der gepunktete Umriss nicht angezeigt. Wenn Sie es mit diesem Beispiel vergleichen. Die Knoten mit dem "log" im Text verwenden e.DefaultDraw = true

Ich habe versucht, dem Beispiel in diese Frage. Es sah ungefähr so ​​aus:

%Vor%

Die Ergebnisse waren jedoch das . (Hinweis, verwendet Rosa, um die Farben zu unterscheiden). Wie Sie sehen können, erstreckt sich der hervorgehobene Hintergrund nicht bis zu der Stelle, an der sich die fokussierte gepunktete Linie befindet. Und es gibt auch eine andere Box, die ebenfalls gezeichnet wird.

Ich bin etwas ratlos, wie ich das beheben kann. Alles, was ich will, ist grauer kursiver Text, wenn etwas geladen ist. Der erste und einfachste Ansatz funktioniert nicht ganz und die zweite Methode fühlt sich an, als würde ich viel zu viel tun.

Nach all dem hat jemand irgendwelche Vorschläge, wie man das richtig macht, weil es einen einfacheren Weg geben muss.

Vielen Dank im Voraus.

    
Emmanuel F 12.01.2010, 22:49
quelle

1 Antwort

14

Sie müssen TextRenderer.DrawText () verwenden. Das ist, was TreeView verwendet, es rendert Text etwas anders als Graphics.DrawString ().

    
Hans Passant 12.01.2010, 23:00
quelle

Tags und Links