有A、B两个窗口,A窗口中有一个按钮和一个方法,A中的方法需要使用B窗口返回的数据
1、单击A窗口中的按钮打开B
2、B关闭时执行A窗口中的事件需要用委托来完成,不能使用showdialog(),B窗口打开是非模式的(Show()),最好是能应用到多个窗口,比如C窗口也有按钮和事件,也需要打开C窗口执行同上的操作。
1、单击A窗口中的按钮打开B
2、B关闭时执行A窗口中的事件需要用委托来完成,不能使用showdialog(),B窗口打开是非模式的(Show()),最好是能应用到多个窗口,比如C窗口也有按钮和事件,也需要打开C窗口执行同上的操作。
frmB B = new frmB();
B.mdiparent = this.mdiParent;
B.Show();
MessageBox.Show("B窗口已关闭!");这里怎么样能使B在show之后不执行后面那段代码,只有当B关闭时才执行,类似showdialog,但是不能用showdialog,因为用这个的话其他MDI子窗口在B显示时无法操作
frmB B = new frmB();
B.MdiParent = this.MdiParent;
B.FormClosed += (sender, e) =>
{
frmB fb = (frmB)sender;
// 访问 fb 的字段属性方法
MessageBox.Show("B窗口已关闭!");
};
B.Show();
{
string data = b.Data; // 获取B的数据
AMethod(data); // 将B的数据用来调用方法
}
这样的话在每次需要这样做得时候都需要注册在当前窗口注册FrmClosed事件,还能有其他方法实现么,
看了你的帖子,我想问下MDI下的子窗口,A打开B,如果其中有判断语句存在,判断之外的代码也要在B关闭后执行怎么写?
if(i = 1)
{
frmB B = new frmB();
B.mdiparent = this.mdiParent;
B.Show();
}
else
{
frmC C = new frmC();
C.mdiparent = this.mdiParent;
C.Show();
}
MessageBox.Show("弹出窗口已关闭!");
这里的MessageBox.Show("弹出窗口已关闭!") 需要在B或者C关闭后执行,难道要注册关闭事件里面写两次?
最好是能阻塞消息,就是show之后的代码要在窗口关闭后再执行
frmB B = new frmB();
B.MdiParent = this.MdiParent;
B.Show();
while (!f.IsDisposed)
{
Application.DoEvents();
}
MessageBox.Show("B窗口已关闭!");
{
using (System.Threading.ManualResetEvent mRest = new System.Threading.ManualResetEvent(false))
{
form.FormClosed += delegate(object sender1, FormClosedEventArgs e1)
{
mRest.Set();
};
form.Show();
while (!mRest.WaitOne(20, false))
{
Application.DoEvents();
}
mRest.Close();
}
}帮看看这个咋样?