2010-12-09 51 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。