C#:通过NodeMouseClick事件帮助迭代树视图项

时间:2009-04-05 10:27:59

标签: c#

我创建了一段代码,该代码将显示与所点击的树视图节点相对应的相应组框,如“首选项”菜单表单。代码执行了它应该做的事情,但我的问题是弄清楚如何使它如果右键单击树视图中的另一个项目将不会调用另一个groubox。

[详细]

假设树视图中有3个节点。 0)一般; 1)听起来; 2)关于;如果我单击节点[1]声音,它将显示相应的组合框,但如果我右键单击树视图节点[0]常规,它将显示它的框架,一旦我抬起鼠标右键,焦点将恢复回到[1]声音,但保留节点0的组框)一般。我怎么可能发生这种情况呢?

[代码]

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

2 个答案:

答案 0 :(得分:0)

我能澄清一下吗?您只想在左键单击时应用此逻辑,是吗?

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

此外 - 您可以考虑针对节点设置.Tag而不是硬编码索引编号 - 避免所有switch等:

    if (e.Button == MouseButtons.Left && e.Node != null)
    {
        GroupBox grp = e.Node.Tag as GroupBox;
        if(grp != null) ShowGroupBox(grp);
    }

然后您需要做的就是首先设置.Tag

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

(注意 - 这只是用于cnosideration;如果您的代码有效,并且您很高兴 - 请不要更改它。)

答案 1 :(得分:0)

最好的答案可能是根本不使用treeView1_NodeMouseClick,而是坚持使用标准的treeView1_AfterSelect。

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