Modal Vs无模式对话框

时间:2012-03-12 11:17:14

标签: c# winforms modal-dialog modeless

我有两种形式,即OneTwo,两者的标题文字与其名称相同。

One有一个按钮,其中的click事件包含

Two l_objTwo = new Two();
l_objTwo.Show();            
MessageBox.Show("Two Closed");

打开Two,之后会弹出“Two Closed”消息。

我的场景是,Two应该以{{1​​}}方式打开,即我需要Modeless的控制权,同时我需要在{{1}之后执行某些功能关闭了。截至目前我正在使用,

One

它的工作正常,但这是实现这一目标的唯一方法吗?

3 个答案:

答案 0 :(得分:1)

不,这不是唯一的方法。 您的第一个表单会将处理程序附加到第二种表单的FormClosedFormClosing个公开事件。

当你的第二张表格关闭时,它会引发事件,第一张表格会知道你的第二张表格已经关闭。

只需使用此代码段:

    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 ClosedFormClosed似乎都是有效事件。

答案 2 :(得分:0)

这看起来很乱。不知道你想在这里实现什么。只需在One的事件处理程序中打开两个表单,然后将两个onclose-event挂钩到MessageBox。