none
树形视图控件单击事件无法调用 RRS feed

  • 问题

  • 我在一个公用的类文件中定义了一个方法供在事件中调用该方法的主要目的是实现点击菜单按钮中的命令与树形视图中的节点命令同效果,

    已经用法吧菜单中的命令动态加载到树形视图中了,需要实现点击树形图中与菜单命令相同的命令执行操作

    如下是我的方法定义的代码

      #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()方法调用各窗体
            }

    运行结果是没有错误,但是单击主菜单按钮可以实现打开窗体错做,点击树形视图节点是没有任何反应,师兄师姐们

    帮忙看看是怎么回事,代码是仿造别人的代码来修改的

    2013年8月17日 14:47

全部回复

  • 代码里面好像没有什么问题,里面所有具有子菜单项的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.

    2013年8月19日 8:52
    版主
  • 谢谢师兄哦 我试试哈
    2013年8月20日 0:47
  • 师兄哦   我看了 括号改了 断点也设置了,但是很多还是很不懂,方便留个QQ号不?我的197252443,具体帮忙看看
    2013年8月20日 1:48
  • 建议你用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

    2013年8月20日 2:57
    版主
  • 不好意思,我们暂时不提供一对一的实时技术支持。

    就像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.

    2013年8月20日 4:47
    版主
  • 恩哈,谢谢哈
    2013年8月20日 7:43
  • 名字都改了,啥子都改了 还是没效果
    2013年8月23日 11:39
  • 你还是把代码放到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.

    2013年8月27日 2:59
    版主
  • 呵呵 解决了 一个代码的可用性,谢谢你哈
    2013年8月28日 9:02
  • 哪个代码的可用性呢?能说出来供大家参考一下吗?


    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.

    2013年8月28日 9:16
    版主