先上截图有三个根节点,每个根节点下只有四个子节点(都是平级关系)。当选中一个节点后,然后选中一个ComBox的的状态(持续,缺省,关闭),然后点击确定按钮就触发事件。要求:当根节点选中时,它下面的三个子节点就不用再判断了,直接一起触发事件。本来效果已经做出来了,我是这样做的:我用了三个switch语句(判断选中的是持续,缺省,关闭)循环判断每一个子节点(选中根节点不触发任何事件),但是代码不够简洁,且当我选中多个根节点时,就出问题了导致有的case下没有触发事件。各位有没有好的办法来解决这个问题。我也不知道这样说,各位有没有明白我的问题,不懂得可以问,在线等。
 循环触发事件

解决方案 »

  1.   

    root
       --1
       --2
       --3
       --4
    root2
       --5
       --6
    选中root1,root2  集合[1,2,3,4,5,6],然后再判断触发哪些事件是必须的,然后循环触发,只维护好一个集合
       
      

  2.   

    隐约有点感觉LZ的想表达什么了。是不是子节点钩选本身就是带事件用户代码的,现在由于父节点选中了,附带就把子节点也都自动钩选/取消钩选了,但其实这时候子节点其实并不需要执行选中的代码?AfterCheck事件中:if (e.Action == TreeViewAction.Unknown) return;if (是相对根节点)
    {
        全选/全不选子节点(e.Node);
    }
    else
    {
        子节点要干的活(e.Node);
    }
      

  3.   

    现在不是选中节点的问题。每个子节点都有一个事件,选中了我们才触发是不是?那么就要循环判断每一个节点的状态,那么根节点选中的时候,是不是就意味着下面的所有子节点一起触发呢?一般做法,循环判断的时候肯定会把每一个接节点都判断进来,这样是不是太浪费了,所以说当根接点选中的时候,下面的子节点判断循环就应该终止,直接将所有事件一起触发。而不用再进入到下面的无穷无尽的case语句。这样说,明白了吧。
      

  4.   

    现在每一个节点的状态我都可以获取到,所以就不用各位在这上面花功夫。关键还是一个简化代码的问题,缩短程序响应时间,和一个保证数据百分百不丢失。像我以前做的,效果可以达到,不知道是不是代码结构不好,程序响应有点慢,因为慢,所以就丢失了一些响应事件。
    下面是触发事件的一个样子选中的节点我放在int []intArry里了,这个大家就不用操心了
    switch(int i in intArry)
    {
    case "根节点A"//看见根节点,我直接返回,
    beak;
    case "子节点1"
    “这里我触发一个事件,发送一条指令1”
     break;
    case "子节点2"
    “这里我触发一个事件,发送一条指令2”
     break;
    case "子节点3"
    “这里我触发一个事件,发送一条指令3”
     break;
    }
    这样执行,当根节点选中的时候,且子节点过多的时候,程序响应有点慢,有没有好的办法
      

  5.   

    要优化代码,去掉switch,改用IOC的方式,要优化性能,就在第二条线程里执行串口数据发送的工作。
      

  6.   

    你根节点选中了。 treeView1.Nodes[0]
    就可以得到子节点的集合。
    treeView1.Nodes[0].Nodes
    循环子节点
    每个子节点都发送一次。
    On_send(treeView1.Nodes[0].Nodes[n])
      

  7.   

    多简单的问题啊。获得触发这个事件的节点。if他是跟节点。则执行所有子节点要执行的内容。else 这个节点就是子节点了。执行你要的内容就行了
      

  8.   

    根节点的状态改变时,子节点状态与其同步
    点确定时,遍历节点,并且触发事件,在事件参数中,将节点传进去,在处理事件中,判断e.Node.Level