我有两种形式,即One
和Two
,两者的标题文字与其名称相同。
One
有一个按钮,其中的click事件包含
Two l_objTwo = new Two();
l_objTwo.Show();
MessageBox.Show("Two Closed");
打开Two
,之后会弹出“Two Closed”消息。
我的场景是,Two
应该以{{1}}方式打开,即我需要Modeless
的控制权,同时我需要在{{1}之后执行某些功能关闭了。截至目前我正在使用,
One
它的工作正常,但这是实现这一目标的唯一方法吗?
答案 0 :(得分:1)
不,这不是唯一的方法。
您的第一个表单会将处理程序附加到第二种表单的FormClosed
或FormClosing
个公开事件。
当你的第二张表格关闭时,它会引发事件,第一张表格会知道你的第二张表格已经关闭。
只需使用此代码段:
private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
f.FormClosed += new FormClosedEventHandler(FormClosedHandler);
f.Show();
}
void FormClosedHandler(object sender, FormClosedEventArgs e)
{
MessageBox.Show("Second form has closed.");
}
答案 1 :(得分:1)
使用事件处理程序
var two = new Two();
two.Closed += OnTwoClosed;
two.Show();
private void OnTwoClosed(object sender, EventArgs e)
{
MessageBox.Show("Two Closed")
}
尚未在winforms Form
上测试此代码,但主体是相同的,并且比使用Windows API及其所有固有缺陷更容易。
另一个好处是,窗户的标题可以是你喜欢的任何东西。
After checking here Closed
和FormClosed
似乎都是有效事件。
答案 2 :(得分:0)
这看起来很乱。不知道你想在这里实现什么。只需在One的事件处理程序中打开两个表单,然后将两个onclose-event挂钩到MessageBox。