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