日期:2014-05-19  浏览次数:20873 次

mdi多文档界面C#程序触发问题
菜单项按钮弹出子窗口后按钮enabled=false,子窗口关闭后按钮enabled=true;父窗口和子窗口各为不同的两个窗口类。弹出子窗口写法是:
frmB   chidfrmB=new   frmB();
chidfrmB.MdiParent=this;
chidfrmB.show();
问题是如何获得子窗口关闭后的状态让菜单按钮重新有效?

-----------------------------------------------------
思路1:(主窗口判断子窗口全关闭)
if(this.MdiChildren       ==null)     判断这个数组是否为空就可以了
或者this.MdiChildren.Count==0也可以

有问题:如何触发这个事件呢??

-----------------------------------------------------
思路2:(子窗口关闭时触发)
//放到初始化中
this.Closing   +=   new   CancelEventHandler(this.whoisresult_Cancel);

//放到事件中
                protected   void   newForm_Closing(object   sender,   CancelEventArgs   e)
                {
                        MessageBox.Show( "关闭 ");
                }

有问题:测试过可以show出“关闭”,但是如何传递给主窗口去触发事件去改变按钮enabled值呢?
----------------------------------------------------

------解决方案--------------------
不要放到初始化中this.Closing += new CancelEventHandler(this.whoisresult_Cancel);
在主窗体中new的时候
frmB chidfrmB=new frmB();
chidfrmB.MdiParent=this;
chidfrmB.Closing += new CancelEventHandler(this.whoisresult_Cancel);
chidfrmB.show();
,chidfrmB关闭的时候就会出发主窗口中的whoisresult_Cancel
------解决方案--------------------
使用ufoteam(帅哥!问题解决了就应该结贴!不结贴后果是信誉降低!) ( )的方法
在whoisresult_Cancel判断关闭窗口的Name属性,改变主窗体的按钮。

private void whoisresult_Cancel(object sender , CancelEventArgs e)
{
Form closedChildForm = sender as Form;

switch(closedChildForm.Name)
{
case "XXX1 " : //按钮处理1
return;
case "XXX2 "://按钮处理12
return;
.....

}
}