.NET WinForm菜单合并出错的问题
环境:
Windows2000Professional,FrameWork1.1
一个MDI主窗体mainForm,定义了2个MainMenu,分别为把M1,M2。在 M2上编写代码打开有Menu的Mdi子窗体mdiChildForm。
在主窗体MainForm的 FormLoad中:
this.Menu = M1;
this.Menu.MergeMenu( M2 );
M2的点击事件:
mdiChildForm cf = new mdiChildForm();
cf.mdiParent = this;
cf.Show();
点击M2中的菜单项打开mdiChildForm时,会将mdiCHildForm的菜单合并到mainForm的菜单上,这没问题。但是当再次打开mdiChildForm时,出错,“提示未将对象引用设置到对象的实例”。
经调试,是在 mdiChildForm.mdiParent =this; 的时候出错,
StackTrace"
at System.Windows.Forms.MenuItem.get_MergeType()^p at
System.Windows.Forms.Menu.MergeMenu(Menu menuSrc)^p at
System.Windows.Forms.MenuItem.MergeMenu(MenuItem itemSrc)^p at
System.Windows.Forms.MenuItem.MergeMenu()^p at
System.Windows.Forms.Menu.MergeMenu(Menu menuSrc)^p at
System.Windows.Forms.Form.get_MergedMenu()^p at
System.Windows.Forms.Form.UpdateMenuHandles()^p at
System.Windows.Forms.Form.MenuChanged(Int32 change, Menu menu)^p at
System.Windows.Forms.Form.InvalidateMergedMenu()^p at
System.Windows.Forms.Form.set_MdiParentInternal(Form value)^p at
System.Windows.Forms.Form.set_MdiParent(Form value)^p at
PanFis.UI.Portal.CreateUserMenu.MenuItem_Click(Object sender, EventArgs e) in d:\\工作 \\产品 _接口平台\\代码\\panfisclientcomponents\\panfis.ui.portal\\createusermenu.cs:line 160"string
更为神奇的是:
(1)同样的程序在windows2003Server(同样是Fx1.1)上没有错误!
(2)在Wind2KProfess 上,如果把Form_Load中的脚本改为:
this.Menu = M2;
this.Menu.MergeMenu( M1 ); //注意M1和M2反过来用。
就一切 OK;
问题点数:60、回复次数:7Top
1 楼XinXinRen(星星)回复于 2006-03-01 15:42:07 得分 0
急!是高手就顶一下。随时在线等待,答对立马给分。Top
2 楼XinXinRen(星星)回复于 2006-03-02 12:30:26 得分 0
错了,
(2)在Wind2KProfess 上,如果把Form_Load中的脚本改为:
this.Menu = M2;
this.Menu.MergeMenu( M1 ); //注意M1和M2反过来用。
就一切 OK;
反过来也是不行!
Top
3 楼diandian82(点点(nothing))回复于 2006-03-02 12:47:06 得分 0
我记得如果是子窗体的话,不用merge不就自动把本身的菜单加载道主窗体上了么?Top
4 楼Samen168(Code to coding)回复于 2006-03-02 12:52:58 得分 0
呵呵,MDI只要设置是否自动合并就可以的Top
5 楼XinXinRen(星星)回复于 2006-03-02 18:56:32 得分 0
哦,可能我没有说清楚。是这样子的,当MDI主窗体打开自身带有菜单的MDI子窗体的时候,能把子窗体的菜单合并到主窗体上,这没有错误,问题是,如果我主窗体的菜单本身是由2个菜单合并生成的,如下面的代码所示(假设mainMDIForm就是我主MDI窗体的名字):
mainMDIForm.Menu = M1;
mainMDIForm.Menu.MergeMenu( M2 );
这时,在主窗体中自身带有菜单的子窗体,第一次打开没问题,子窗体的菜单可以合并到主窗体上,和预期的一样,但是再次打开自身带有菜单的子窗体时,问题就来了,出现了上面说达到的异常,也就是在.NET自动合并菜单时出了错。
不知道我这次说明白了没有。谢谢!
Top
6 楼XinXinRen(星星)回复于 2006-03-04 14:24:11 得分 0
终于查到了,是 .NET FX1.1的Bug。
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B890328
Top
7 楼XinXinRen(星星)回复于 2006-03-04 14:50:01 得分 0
打上 FX SP1解决了 :)Top




