Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:帮助遍历树视图通过NodeMouseClick事件查看项目_C# - Fatal编程技术网

C#:帮助遍历树视图通过NodeMouseClick事件查看项目

C#:帮助遍历树视图通过NodeMouseClick事件查看项目,c#,C#,我创建了一段代码,它将显示与正在单击的treeview节点对应的适当的groupbox,就像首选项菜单表单一样。代码完成了它应该做的事情,但我的问题是如何做到这一点,这样当右键单击树视图中的另一项时,另一个groupbox就不会被调用到视图中 [详情] 假设树视图中有3个节点。0)一般;1) 声音;(2)关于;如果我单击节点[1]声音,它将显示相应的groupbox,但如果我右键单击treeview节点[0]General,它将显示其帧,一旦我抬起鼠标右键单击,焦点将恢复为[1]声音,但保留节点

我创建了一段代码,它将显示与正在单击的treeview节点对应的适当的groupbox,就像首选项菜单表单一样。代码完成了它应该做的事情,但我的问题是如何做到这一点,这样当右键单击树视图中的另一项时,另一个groupbox就不会被调用到视图中

[详情]

假设树视图中有3个节点。0)一般;1) 声音;(2)关于;如果我单击节点[1]声音,它将显示相应的groupbox,但如果我右键单击treeview节点[0]General,它将显示其帧,一旦我抬起鼠标右键单击,焦点将恢复为[1]声音,但保留节点0)General的groupbox。我怎样才能防止这种情况发生

[守则]

    private void tvFrames_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        // How would I make sure that it won't display a different groupbox if another treeview node
        // is currently being right clicked (temporarily selected before reverting back to previous focused node item)?
        if (e.Node != null)
        {
            switch (e.Node.Index)
            {
                case 0:
                    ShowGroupBox(groupboxZero);
                    break;

                case 1:
                    ShowGroupBox(groupboxOne);
                    break;

                case 2:
                    ShowGroupBox(groupboxTwo);
                    break;
            }
        }
    }

我可以澄清一下吗?你只想在左键点击时应用这个逻辑,是吗

    if (e.Button == MouseButtons.Left && e.Node != null)
    {
        switch(...) {
          ...
        }
    }

还-而不是硬编码索引号,您可以考虑对节点设置<代码>标签>代码>避免所有<代码>开关<代码>等:

    if (e.Button == MouseButtons.Left && e.Node != null)
    {
        GroupBox grp = e.Node.Tag as GroupBox;
        if(grp != null) ShowGroupBox(grp);
    }
然后,您需要做的就是首先设置
.Tag
s:

    someNode.Tag = groupboxZero;
    someOtherNode.Tag = groupboxOne;
    someThirdNode.Tag = groupboxTwo;

(注意-这只是出于cnosideration;如果您的代码运行正常,并且您很高兴,请不要更改它)。

最好的答案可能是根本不使用TreeViewW1_nodeMouse单击,而是坚持使用标准的TreeViewW1_AfterSelect


您还有一个BeforeSelect,可用于保存数据或取消移动。

我使用了元素。标记很多,但字典不太容易出错。我感谢您提供的信息丰富的回复,但我不得不将此答案告诉Henk Holterman。我不知道beforeselect和afterselect事件是可用的,只需转移例程,它就可以完美地工作,无需检查鼠标点击或添加标记。标记提示感谢您指出这些事件的存在。我把例行程序从nodeclick转移到afterselect事件,它的功能完美无瑕。