2009-10-30 67 views
3

我真的需要以編程方式點擊集合中的所有節點,但我看不到如何做到這一點。我最終試圖調用Node_Click事件,但我不知道如何使用參數。感謝您的幫助!以編程方式點擊treeview中的節點?

foreach (TreeNode node in treeView1.Nodes) 
     { 
      //here I would need to "click" on each node 
     } 

編輯: 我需要提高TreeNode_After選擇。它的樹視圖代表數據庫結構,如果你點擊節點,它可能會或可能不會有孩子(取決於數據庫檢索)。該週期應該用作ExpandAll。

+0

我想我有一個答案給你,但首先,我需要問你爲什麼需要這樣做?你是否需要以編程方式觸發事件觸發,以便事件處理程序中的代碼能夠運行? – David 2009-10-30 15:23:49

+0

我編輯了我的答案,以便在選擇樹中的每個節點後觸發它。 – 2009-10-30 15:37:07

回答

3

爲了使每個節點的樹都被選擇,這樣做:

void SelectAllNodes(TreeNodeCollection tnc) 
{ 
    foreach(TreeNode t in tnc) 
    { 
     treeView1.SelectedNode = t; 
     SelectAllNodes(t.Nodes); 
    } 
} 

編輯:
另外值得一提的是,你的代碼:

foreach (TreeNode node in treeView1.Nodes) 
{ 
     //here I would need to "click" on each node 
} 

不會着火在樹中的每個節點上,它只會返回最上層的節點。所以如果他們中的任何一個有子節點,他們就不會被上面的foreach看到。如果你想在整個樹中獲得每個節點,你需要通過它們遞歸,就像我在上面的例子中那樣。

+0

你是對的,我忘了「嵌套」的。謝謝! – Petr 2009-10-30 15:36:29

1

你可以「假」點擊簡單地通過將節點變成了「處理程序狀」功能:

foreach (TreeNode node in treeView1.Nodes) 
{ 
    node_click(node, null) 
} 

protected void node_click(object sender, System.EventArgs e) 
{ 
    //...Your code here 

} 
0

那麼,你已經定義和有線一個TreeView.NodeMouseClick事件處理方法?如果你有一個方法,你可以把它在你的foreach循環這樣:

foreach (TreeNode node in treeView1.Nodes) 
{ 
    treeView1_NodeMouseClick(node, null); 
} 

這一說法上面,在我的構造函數,例如,我有這樣的代碼

treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick); 

而且我有一個馬虎事件處理程序,如:

public void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
{ 
    TreeNode node = sender as TreeNode; 
    if (node != null) 
     MessageBox.Show(node.Text); 
} 

它應該是安全的在null只要發送了TreeNodeMouseClickEventArgs只要你不打算實際利用事件參數。

EDITS在答覆問題編輯:

看起來你應該只是簡單地通過直接調用調用你AfterSelect(...)方法,當用戶按下全部展開按鈕。因此,如果我正確地猜測了您的體系結構,您想要在您的點擊處理程序中添加對AfterSelect的呼叫全部展開按鈕

1

這會實現您要找的內容嗎?

 foreach (TreeNode node in this.treeView1.Nodes) 
     { 
      this.treeView1.SelectedNode = node; 
     }