2016-08-05 35 views
0

ノードが7個、子ノードが30-40個近く必要です。それぞれの子ノードは、C#のForm1で作業している間、通常の単一チェックボックスのように、自身の「関数本体」を持つ必要があります。ユニークなタスク(ユニークなデータの取得、文字列の連結、値の別のファンクションへの解析など)を自由に割り当てることができます。私は基本的に各チェックボックスにアクセスする必要があります。 何これまでのところ、私は(簡単にするためにわずか数行を示す)ツリーリストをして作成した後に試してみました:私は必要なように。これは、ツリービューのGUIを生成C#.Netで個別のチェックボックスと個別のチェックボックスとして動作するTreeViewチェックボックス

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"); })); 

(NB:あるとしてトップレベルのノードの実装は残してもよい。)

次に、あなたは、このようにユニークなタスクコードにアクセスするには、あなたのノードを使用することができます。

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

見た目が正しいかもしれませんが、おそらく私はノードを使ってユニークなタスクコードにアクセスすることができる部分を正確にフォローしていません。ノード "セッション"サブノード"?本当にあなたの役に立つでしょう – Hamza

+0

OK。まず、 'ActionNode'クラス定義(つまり、' ActionNode:TreeNode ... 'クラス)をクラス定義のどこかに配置します。 (続き...) –

+0

第2に、サンプルコードを含むメソッド( 'treeView1.Nodes.Add(" Session ");'で始まる行)は 'treeView1.Nodes [...]のような全ての行を削除します。 .Nodes.Add(...) 'を呼び出す代わりに、2番目のコードブロック(' treeView1.Nodes [0] .Nodes.Add(新しいActionNode( "Extended Start"、()=> {MessageBox.Show "Extended Start");})); ') –

関連する問題