在Form_Closing事件中规范化最小化的窗体

本文关键字:规范化 最小化 窗体 事件 Form Closing | 更新日期: 2023-09-27 18:11:28

我有一个测试应用程序与多个形式,一个是一种粗糙的菜单。当我用按钮单击选择其他表单之一时,菜单表单最小化。所有好。

我现在想要发生的是,当我完成了第二个表单,点击红色的叉,我想要菜单从托盘打开。看起来很简单,但是我真的很纠结。

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

FormControl是我的类,以确保只能打开MainMenu的一个实例。代码在按钮单击事件内工作,但我无法获得任何类型的表单关闭/关闭事件触发。

在Form_Closing事件中规范化最小化的窗体

好吧,你关于"Windowstate可能无法在特定事件中工作"的评论让我感到不安,所以我做了一个简单的测试:

    创建Form1和Form2
  1. 添加按钮和点击事件到Form1
  2. 添加FormClosed事件到Form2

按钮1单击事件处理程序:

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是否真的订阅了FormClosed或FormClosing事件

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