TreeView-Besitzer zeichnen einen Fehler bei der Auswahl

Ich versuche, ein paar weitere Symbole zu Elementen eines Standard-System.Windows.Forms.TreeView-Steuerelements hinzuzufügen.

Mein Plan war es, nur den Beschriftungsbereich des TreeView-Steuerelements zu ändern, aber es zeigt ein seltsames Verhalten. Wenn ich auf einen Knoten klicke, um ihn auszuwählen, wird der Hintergrund bei gedrückter Maustaste korrekt mit der Hervorhebungsfarbe gezeichnet. Der Text hat jedoch die falsche, nicht ausgewählte Farbe, bis ich die Maustaste loslasse. Es ist als obe.State enthält den falschen Zustand zwischen dem Drücken und Loslassen der Maustaste.

Folgendes mache ich: Ich beginne mitthis.DrawMode = TreeViewDrawMode.OwnerDrawText und dann registriere meinen Eventhandler mitthis.DrawNode += LayoutTreeView_DrawNode. Hier ist der Handler:

void LayoutTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
{

    Color color = (e.State & TreeNodeStates.Selected) != 0 ?
        SystemColors.HighlightText : SystemColors.WindowText;

    TextFormatFlags flags = TextFormatFlags.Left | TextFormatFlags.SingleLine |
       TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis;

    TextRenderer.DrawText(e.Graphics, e.Node.Text, Font, e.Bounds, color, flags);
}

Wenn ich den Handler auf seinen Standardfall setze ...

void LayoutTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
    e.DefaultDraw = true;
}

... dasselbe passiert, was seltsam ist, da Windows es jetzt tatsächlich zeichnet. Dieses Verhalten tritt in Windows XP mit .NET 3.5 auf.

Gibt es eine Möglichkeit, dieses seltsame Verhalten zu umgehen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage