我需要有7个节点,并且每个节点内部应有近30-40个子节点。每个子节点都必须拥有自己的“功能主体”,就像我们在C#中的Form1中工作时可以拥有一个普通的单个复选框一样。这样我就可以自由地为其分配唯一的任务(例如获取唯一的数据,字符串连接以及还将值解析到另一个函数)。我需要基本上可以访问每个复选框。到目前为止,在创建树列表之后,我尝试的是(为简单起见,仅显示了几行):
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");
这会像我需要的那样生成树状视图的GUI,但是访问复选框是我的主要问题!
谢谢
您可以使用包含一些代码来执行任务的委托属性来定义自定义树节点,例如:
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();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句