已有57人关注
遍历menustrip的菜单项给treeview出错
发表在C#图书答疑 2009-05-27
是否精华
版块置顶:
public void GetMenu(TreeView treeV, MenuStrip MenuS)
        {
            for (int i = 0; i < MenuS.Items.Count; i++) //遍历MenuStrip组件中的一级菜单项
            {
                //将一级菜单项的名称添加到TreeView组件的根节点中,并设置当前节点的子节点newNode1
                TreeNode newNode1 = treeV.Nodes.Add(MenuS.Items[i].Text);
                newNode1.Tag = 0;
                //将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
                ToolStripDropDownItem newmenu = (ToolStripDropDownItem)MenuS.Items[i];
                //判断当前菜单项中是否有二级菜单项
                if (newmenu.HasDropDownItems && newmenu.DropDownItems.Count > 0)
                    for (int j = 0; j < newmenu.DropDownItems.Count; j++)    //遍历二级菜单项
                    {
                        //将二级菜单名称添加到TreeView组件的子节点newNode1中,并设置当前节点的子节点newNode2
                        TreeNode newNode2 = newNode1.Nodes.Add(newmenu.DropDownItems[j].Text);
                        newNode2.Tag = int.Parse(newmenu.DropDownItems[j].Tag.ToString());
                        //将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
                        ToolStripDropDownItem newmenu2 = (ToolStripDropDownItem)newmenu.DropDownItems[j];
                        //判断二级菜单项中是否有三级菜单项
                        //if (newmenu2.HasDropDownItems && newmenu2.DropDownItems.Count > 0)
                        //for (int p = 0; p < newmenu2.DropDownItems.Count; p++)    //遍历三级菜单项
                        //将三级菜单名称添加到TreeView组件的子节点newNode2中
                        //newNode2.Nodes.Add(newmenu2.DropDownItems[p].Text);
                    }
            }
        }
老师,我调用这个方法后怎调试不了,提示未将对象引用设置到对象的实例.
分享到:
精彩评论 9
小科_mrkj
学分:43 LV2
2009-05-27
沙发
读者朋友:
    您好,看一下您的菜单中是否有二级菜单和三级菜单,然后插入断点看一下错误出在哪?出现你说的这种问题主要是因为没有找到相应的菜单项造成的。
yxishe
学分:0 LV1
2009-05-27
板凳
搞了很久还是不行,不知道哪错了,菜单下有二级菜单,代码拷贝光盘的代码,是不是还有哪要设置呢,比如控件的属性什么的?书本里说将调用的子窗体的菜单项的tag属性,从1开始依次设置值,这个我不知道怎么弄,是不是跟这个有关系呢.不好意思啊老师,我是刚学,问题有点多,请见谅
小科_mrkj
学分:43 LV2
2009-05-27
地板
读者朋友:
    您好,我们的源程序中应该没有什么特殊设置,请打开源程序仔细缕一遍,看源程序是怎么调用的,这也是一个学习的过程!
yxishe
学分:0 LV1
2009-05-27
4L
newNode2.Tag = int.Parse(newmenu.DropDownItems[j].Tag.ToString());这一句提示未将对象引用设置到对象的实例.
我已经在menustrip控件里加二级菜单了,但还是有这个提示,搞了半天,咳,看来买错书了,这本不适合我这菜鸟啊.
yxishe
学分:0 LV1
2009-05-27
5L
终于可以看到二级了,把newNode2.Tag = int.Parse(newmenu.DropDownItems[j].Tag.ToString());这句给注释了就可以,请问老师,问题出再那里,谢谢
小科_mrkj
学分:43 LV2
2009-05-30
6L
读者朋友:
    您好,问题是由于newmenu.DropDownItems[j].Tag.ToString()这个有可能没有值造成的,因为有的二级菜单项可能没有值,那运行到这块的话就会出现“未将对象引用设置到对象的实例”错误。
    读者朋友,请不要灰心,学习的过程中只有遇到问题,然后解决问题,才能加深对知识的理解,这其实是一个非常好的学习过程,对以后是很有帮助的。
yxishe
学分:0 LV1
2009-05-30
7L
二级菜单有没有值要在哪看呢,如果是直接在窗体点菜单栏看的话,那我已经都添加了二级菜单了,老师这次能不能详细的说一下,我不想再问这个问题了,希望这次能解决,呵呵.
yxishe
学分:0 LV1
2009-05-30
8L
问题解决,给每个二级菜单的tag属性加个值就可以了,从1开始加起,上次问老师你,用不用设置些什么你就说不用,郁闷哦
小科_mrkj
学分:43 LV2
2009-05-30
9L
读者朋友:
    您好,由于书已经出很长时间了,对于当时程序中的一些特殊设置,我们也不可能记得特别清楚,读者买书的话,主要是根据书上的例子进行学习,对于一些特殊设置,如果仔细看书和源代码的话,相信都会注意到,我们的论坛上主要对书中例子出现的错误进行解决,而这个问题是你在别的程序中调用出现的问题,但光盘中的源程序并没有出现问题,我们也不能判断到底是那出问题了,只能是让你一步一步调试。
首页上一页 1 下一页尾页 9 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照