TreeView复选框可以作为个人和& C#.Net中的单独复选框

时间:2016-08-05 08:39:37

标签: c# .net checkbox treeview unique

我需要有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,但访问复选框是我的主要问题!

由于

1 个答案:

答案 0 :(得分: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();
}