在Form_Closing事件中规范化最小化的winform

时间:2011-10-14 12:40:31

标签: c# .net winforms visual-studio-2010 events

我有一个包含多种形式的测试应用程序,其中一种是粗略的菜单。当我使用按钮选择其他表单之一时,单击菜单表单最小化。一切都好。

我现在想要的是当我完成第二个表格并点击红色十字架时,我希望菜单从托盘中打开。看起来很简单,但我把头发拉了出来。

private void Form2_Closing(object sender,System.ComponentModel.CancelEventArgs e)
{
    var menu = FormControl.MainMenu;
    menu.WindowState = FormWindowState.Normal;

    e.Cancel = false;
}

FormControl是我的类,以确保只能打开一个MainMenu实例。代码在按钮单击事件中起作用,但我无法触发任何形式的关闭/关闭事件。

2 个答案:

答案 0 :(得分:2)

form2.FormClosing += delegate 
                            {
                                var menu = FormControl.MainMenu;
                                menu.WindowState = FormWindowState.Normal; 
                            };
form2.ShowDialog(); //Or Show() whatever you wish.

答案 1 :(得分:1)

好的,你对“Windowstate的评论可能无法在特定事件中发挥作用”让我感到不安,所以我做了简单的测试:

  1. 创建Form1和Form2
  2. 添加了按钮并单击事件到Form1
  3. 将FormClosed事件添加到Form2
  4. Button1 Click事件处理程序:

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.WindowState = FormWindowState.Normal;
        WindowState = FormWindowState.Minimized;
        form2.Show(this);//Passing Form1 as owner
        form2.Activate();
    }
    

    Form2 FormClosed事件处理程序:

    private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        this.Owner.WindowState = FormWindowState.Normal;//change state of owner form
    }
    

    <强>结果: 程序启动后 - 打开Form1。单击按钮后 - Form1最小化并弹出Form2。关闭Form2后 - Form1恢复到正常状态。

    <强>恢复 仔细检查您的Form2 REALY是否属于FormClosed或FormClosing事件。