询问者
树形视图控件单击事件无法调用

问题
-
我在一个公用的类文件中定义了一个方法供在事件中调用该方法的主要目的是实现点击菜单按钮中的命令与树形视图中的节点命令同效果,
已经用法吧菜单中的命令动态加载到树形视图中了,需要实现点击树形图中与菜单命令相同的命令执行操作
如下是我的方法定义的代码
#region TreeView控件调用StatusStrip控件单击事件
/// <summary>
/// 用TreeView控件调用StatusStrip控件下各菜单的单击事件.
/// </summary>
/// <param name="MenuS">MenuStrip控件</param>
/// <param name="e">TreeView控件的TreeNodeMouseClickEventArgs类</param>
public void TreeMenuClick(MenuStrip MenuS, TreeNodeMouseClickEventArgs e)
{
string Men = "";
for (int i = 0; i < MenuS.Items.Count; i++) //遍历MenuStrip控件中主菜单项
{
Men = ((ToolStripDropDownItem)MenuS.Items[i]).Name; //获取主菜单项的名称
if (Men.IndexOf("Menu") == -1) //如果MenuStrip控件的菜单项没有子菜单
{
if (((ToolStripDropDownItem)MenuS.Items[i]).Text == e.Node.Text) //当节点名称与菜单项名称相等时
if (((ToolStripDropDownItem)MenuS.Items[i]).Enabled == false) //判断当前菜单项是否可用
{
MessageBox.Show("当前用户无权限调用" + "\"" + e.Node.Text + "\"" + "窗体");
break;
}
else
Show_Form(((ToolStripDropDownItem)MenuS.Items[i]).Text.Trim(), 1); //调用相应的窗体
}
ToolStripDropDownItem newmenu = (ToolStripDropDownItem)MenuS.Items[i];
if (newmenu.HasDropDownItems && newmenu.DropDownItems.Count > 0) //遍历二级菜单项
for (int j = 0; j < newmenu.DropDownItems.Count; j++)
{
Men = newmenu.DropDownItems[j].Name; //获取二级菜单项的名称
if (Men.IndexOf("Menu") == -1)
{
if ((newmenu.DropDownItems[j]).Text == e.Node.Text)
if ((newmenu.DropDownItems[j]).Enabled == false)
{
MessageBox.Show("当前用户无权限调用" + "\"" + e.Node.Text + "\"" + "窗体");
break;
}
else
Show_Form((newmenu.DropDownItems[j]).Text.Trim(), 1);
}
ToolStripDropDownItem newmenu2 = (ToolStripDropDownItem)newmenu.DropDownItems[j];
if (newmenu2.HasDropDownItems && newmenu2.DropDownItems.Count > 0) //遍历三级菜单项
for (int p = 0; p < newmenu2.DropDownItems.Count; p++)
{
if ((newmenu2.DropDownItems[p]).Text == e.Node.Text)
if ((newmenu2.DropDownItems[p]).Enabled == false)
{
MessageBox.Show("当前用户无权限调用" + "\"" + e.Node.Text + "\"" + "窗体");
break;
}
else
Show_Form((newmenu2.DropDownItems[p]).Text.Trim(), 2);
}
}
}}
#endregion在树形视图控件中我在其点击节点事件中调用的方法
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
fo.TreeMenuClick(menuStrip1,e); //用实例化对象的TreeMenuclick()方法调用各窗体
}运行结果是没有错误,但是单击主菜单按钮可以实现打开窗体错做,点击树形视图节点是没有任何反应,师兄师姐们
帮忙看看是怎么回事,代码是仿造别人的代码来修改的
全部回复
-
代码里面好像没有什么问题,里面所有具有子菜单项的MenuStrip Item名称好像都需要包含"Menu",请确认下是不是你的MenuStrip的菜单项都遵守了这个规则。代码里面的大括号最好都补全了,比如if语句后面的语句块最好用大括号括起来。
我对你的代码作了一个简单的测试,是可以执行的,应该没有问题。可能你把菜单的Name还有Text属性搞混淆了,所以导致代码中找不到对应名称,代码没有执行效果。
我建议你在这个方法里面打一个断点,在点击TreeView的节点的时候看看执行情况就明白错误在哪里了。
Caillen
MSDN Community Support | Feedback to us
Develop and promote your apps in Windows Store
Please remember to mark the replies as answers if they help and unmark them if they provide no help. -
建议你用Hotmail或者网盘申请一个空间,把有问题的项目传上来我们下载运行看看。
If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer
Help by clicking:
Click here to donate your rice to the poor
Click to Donate
Click to feed Dogs & Cats
Found any spamming-senders? Please report at: Spam Report -
不好意思,我们暂时不提供一对一的实时技术支持。
就像ProgrammingVolunteer说的那样,你可以将你的Project放到SkyDrive上,然后把链接贴到这儿,我会给你作一个调试,把出现的问题给你指出来。
Caillen
<THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
Thanks
MSDN Community Support
Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later. -
你还是把代码放到Skydrive上然后把链接帖上来,我帮你调试一下,看看什么问题吧。我估计就是你的名称搞错了。要么你就单步调试一下,监视一下各个变量的值,分析一下原因。
Caillen
<THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
Thanks
MSDN Community Support
Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later. -
哪个代码的可用性呢?能说出来供大家参考一下吗?
Caillen
<THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
Thanks
MSDN Community Support
Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.