如何从子窗体设置父窗体的WindowState属性

本文关键字:窗体 WindowState 属性 设置 | 更新日期: 2023-09-27 18:10:51

我的c#应用程序有两个表单。主表单的ControlBox设置为false,然后像这样创建第二个表单:

this.ControlBox = false;
new Form2().Show();

第二种形式能够最小化和最大化。我需要主窗体WindowState属性能够在窗口最小化或返回到其正常状态时从子窗体设置。

我遇到的问题是,当我试图最小化子窗口时,程序崩溃了。

这是我的代码:

private void Form2_SizeChanged(object sender, EventArgs e)
{
    if(this.WindowState != FormWindowState.Maximized)
        this.Parent.WindowState = this.WindowState;
}

我怎样才能绕过这个?

如何从子窗体设置父窗体的WindowState属性

您的问题是Form2 Parent属性为空,调用Show()方法实际上并没有设置所示表单的Parent属性(在调试器中检查)。最简单的解决方法是通过Form2(称为Form)的构造函数传递Form1(调用Form)引用,然后使用该引用设置WindowState属性。像这样:

public partial class Form2 : Form
{
    Form1 form1;
    public Form2(Form1 frm)
    {
        InitializeComponent();
        form1 = frm;
        this.SizeChanged +=Form2_SizeChanged;
    }
    private void Form2_SizeChanged(object sender, EventArgs e)
    {
        if (this.WindowState != FormWindowState.Maximized)
            form1.WindowState = this.WindowState;
    }
} 

然后在Form1的代码中你可以改成:

this.ControlBox = false;
Form2 frm = new Form2(this);
frm.Show();

将form 1 (this)传递给form 2的公共属性,并在form 2上进行修改

Form2 f = new Form2();
f.f1 = this;
f.Show();
// or: new Form2 { f1 = this }.Show();

表格2:

public Form1 f1;
[...]
[Event:]
f1.WindowState = FormWindowState.Minimized;