2016-08-14 24 views
1

Ich verwende diese TreeViewMS Implementierung, so dass die Benutzer Multiselection-Funktion haben können, aber ich habe festgestellt, dass etwas nicht richtig funktioniert heute. Wenn ich die Eigenschaft TreeNode.ForeColor auf Color.Red setze und den Fokus auf diesen Knoten lege, wird seine Farbe bald wieder auf die Standardfarbe (Schwarz) zurückgesetzt, wenn ich die Maus aus diesem Knoten herausgehe. Wie kann ich das umgehen? Ich habe nach einem Ereignis gesucht, um die TreeNode.ForeColor bald auf meine benutzerdefinierte zu setzen, da der Knoten den Fokus verloren hat, wenn dieser Knoten den Anforderungen entspricht, seine Farbe zu ändern. Gibt es so ein Ereignis?Benutzerdefinierte Node.ForeColor wird zurückgesetzt, wenn Fokus verloren

+0

Ist HideSelection wahr? – TaW

Antwort

1

Das Problem ist in TreeViewMS Klasse. Schauen Sie sich removePaintFromNodes Methode:

protected void removePaintFromNodes() 
{ 
    if (m_coll.Count==0) return; 

    TreeNode n0 = (TreeNode) m_coll[0]; 
    Color back = n0.TreeView.BackColor; 
    Color fore = n0.TreeView.ForeColor; 

    foreach (TreeNode n in m_coll) 
    { 
     n.BackColor = back; 
     n.ForeColor = fore; 
    } 
} 

Diese Methode setzt die Hintergrundfarbe und die forecolor zur Baum-Ansicht Standard.

Wenn Sie diese Methode entfernen, behält sie die Vordergrundfarbe des Knotens bei, wenn Sie auf einen anderen Knoten klicken, aber wenn der Knoten ausgewählt ist, wird die Standardfarbe für den ausgewählten Knoten verwendet.

Um das zu beheben, können Sie den Knotentext selbst zeichnen, indem Sie diese:

treeViewMS1.DrawMode = TreeViewDrawMode.OwnerDrawText; 
treeViewMS1.DrawNode += TreeViewMS1_DrawNode; 

Und dieses:

private void TreeViewMS1_DrawNode(object sender, DrawTreeNodeEventArgs e) 
{ 
    TextRenderer.DrawText(e.Graphics, e.Node.Text, e.Node.NodeFont, e.Bounds, e.Node.ForeColor, TextFormatFlags.GlyphOverhangPadding); 
} 
Verwandte Themen