2010-12-09 52 views
1

我在TreeNode对象上设置ForeColor。后来当我点击这个节点时,SelectedNode.ForeColor直到我释放鼠标后才改变。TreeNode ForeColor更改SelectedNode.ForeColor

TreeNode.ForeColor = Color.Red; 

ForeColor的所有TreeNodes == Color.Empty在鼠标单击时立即获取正确的SelectedNode.ForeColor。

如果我使用键盘移动选区,则按预期工作。但不是在鼠标点击。如何将节点的前景色设置为Color.Black并在第一次鼠标单击时获取正确的SelectedNode.ForeColor?

我像这样填充TreeView。在鼠标与“色”的所有TreeNode对象附加我得到的前景色(红)下来..直到我放开鼠标左键并得到适当的白色前景色..

private void Form1_Load(object sender, EventArgs e) 
{ 
    for (int i = 0; i < 3; i++) 
    { 
    TreeNode node = new TreeNode("node_" + i); 

    for (int j = 0; j < 3; j++) 
    { 
     TreeNode childNode = new TreeNode("childNode_" + i + j); 

     if (j==0) 
     { 
     childNode.Text += "color"; 
     childNode.ForeColor = Color.Red; 
     } 

     node.Nodes.Add(childNode); 
    } 
    treeView1.Nodes.Add(node); 
    } 
} 

如果我这样做...

treeView1.FullRowSelect = false; //if this is true it don't work.. hm! 
treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText; 
treeView1.DrawNode += new DrawTreeNodeEventHandler(treeView1_DrawNode); 

void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) 
{ 
    e.DrawDefault = true; 
} 

它的工作原理!嗯。这是.NET TreeView的默认行为中的错误吗?

,当然还有..

//treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText; 
//treeView1.DrawNode += new DrawTreeNodeEventHandler(treeView1_DrawNode); 

..现在又回到了正常的..不要工作!任何人都可以解释为什么!?! 当我单击节点上的Left按钮时,在这里获得蓝色背景和Node ForeColor。在它上面等待,直到我释放鼠标按钮,然后绘制选择背景 - 前面颜色正确(在我看来)。

注意!如果FullRowSelect为真。上面的DrawNode代码不起作用。它会在除节点部分(它被涂成白色)之外的所有行上绘制蓝色背景颜色。

回答

0

设置鼠标点击事件触发鼠标向下。

+0

我看不到这个帮助。已将此代码添加到treeView1_MouseDown。 MouseEventArgs args = new MouseEventArgs(MouseButtons.Left,e.Clicks,e.X,e.Y,e.Delta); treeView1_MouseClick(sender,args); 我仍然在鼠标按下时应用ForeColor(在蓝色背景上),直到我释放鼠标按钮(左)。然后我在蓝色背景上获得适当的白色ForeColor。 – Vemund 2010-12-10 07:57:58

0

使treeview的HideSelection属性为false。