2016-08-05 60 views
0

我需要有7個節點,並且每個子節點內部有近30-40個子節點。每個子節點都需要有一個自己的「函數體」,就像我們在C#中的Form1中使用普通單個複選框一樣。以便我可以自由地爲其分配唯一的任務(如獲取唯一數據,字符串連接以及將值分析到另一個函數)。我需要基本上訪問每個複選框。 什麼到目前爲止,我創建樹形列表之後試圖爲(展示爲簡單起見,只有幾行):TreeView複選框在C#.Net中作爲單獨和單獨的複選框工作.Net

treeView1.Nodes.Add("Session"); 
treeView1.Nodes.Add("Reset"); 

treeView1.Nodes[0].Nodes.Add("Extended Start"); 
treeView1.Nodes[1].Nodes.Add("Hard Reset"); 
treeView1.Nodes[2].Nodes.Add("EOL Mode State Read"); 
treeView1.Nodes[2].Nodes.Add("Current Err Tracer Read"); 
treeView1.Nodes[2].Nodes.Add("Read Odometer value from Bus Read"); 

這會生成樹狀視圖界面就像我的需要,但訪問的複選框是我的主要問題!

感謝

+0

什麼技術你在用嗎?的WinForms/ASP/WPF/UWP? –

+0

我正在使用WinForms – Hamza

回答

0

您可能包含一些代碼的委託屬性來定義您的自定義樹節點來執行任務,如:

class ActionNode : TreeNode 
{ 
    public Action Action { get; } 
    public ActionNode(string text, Action action) 
     : base(text) 
    { 
     Action = action; 
    } 
} 

然後加入這個類的實例作爲子節點分配具體任務代碼到每個實例。例如:

treeView1.Nodes[0].Nodes.Add(new ActionNode("Extended Start", 
    () => { MessageBox.Show("Extended Start"); })); 
treeView1.Nodes[1].Nodes.Add(new ActionNode("Hard Reset", 
    () => { MessageBox.Show("Hard Reset"); })); 
treeView1.Nodes[2].Nodes.Add(new ActionNode("EOL Mode State Read", 
    () => { MessageBox.Show("EOL Mode State Read"); })); 
treeView1.Nodes[2].Nodes.Add(new ActionNode("Current Err Tracer Read", 
    () => { MessageBox.Show("Current Err Tracer Read"); })); 
treeView1.Nodes[2].Nodes.Add(new ActionNode("Read Odometer value from Bus Read", 
    () => { MessageBox.Show("Read Odometer value from Bus Read"); })); 

(注:頂級節點的實現,可以保留原樣。)

然後你可以用你的節點訪問這樣獨特的任務代碼:

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
{ 
    var actionNode = e.Node as ActionNode; 
    if (actionNode != null) 
     actionNode.Action(); 
} 
+0

看起來是正確的,但也許我沒有正確地遵循我可以使用節點訪問唯一任務代碼的部分,您可以給我們說一個例子,比如節點「會話」子節點「擴展啓動「?會真的對你有幫助 – Hamza

+0

好的。首先,將'ActionNode'類定義(即'class ActionNode:TreeNode ...')放在你的窗體類定義中。 (待續...) –

+0

其次,在包含示例代碼的方法中(即以treeView1.Nodes.Add(「Session」);'開始的行),刪除所有行,如'treeView1.Nodes [...] .Nodes.Add(...)',而是從我的第二個代碼塊(即'TreeView1.Nodes [0] .Nodes.Add(new ActionNode(「Extended Start」,()=> {MessageBox.Show 「Extended Start」);}));') –

相關問題