C# 如何从子窗体设置父窗体WindowsState属性?

C# 如何从子窗体设置父窗体WindowsState属性?,c#,winforms,C#,Winforms,我有两张申请C#的表格。主窗体的ControlBox设置为false,然后创建第二个窗体,如下所示: this.ControlBox = false; new Form2().Show(); 第二种形式能够最小化和最大化。当窗口最小化或返回到正常状态时,我需要能够从子窗体设置主窗体WindowsState属性 我遇到的问题是,当我试图最小化子窗口时,程序崩溃 这是我的代码: private void Form2_SizeChanged(object sender, EventArgs e) {

我有两张申请C#的表格。主窗体的ControlBox设置为false,然后创建第二个窗体,如下所示:

this.ControlBox = false;
new Form2().Show();
第二种形式能够最小化和最大化。当窗口最小化或返回到正常状态时,我需要能够从子窗体设置主窗体WindowsState属性

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

这是我的代码:

private void Form2_SizeChanged(object sender, EventArgs e)
{
    if(this.WindowState != FormWindowState.Maximized)
        this.Parent.WindowState = this.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();
将表格1(
)传递给表格2中的公共属性,并在表格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;

您会遇到什么错误?它会一直工作,直到您在Visual Studio中构建并在另一台计算机上运行它。。上面写着未处理的例外我怀疑问题出在我提出的代码中,可能是其他地方…?成功了!在父窗体设置为form1之后,我必须手动配置事件处理程序。因此
this.SizeChanged+=Form2\u SizeChanged
应该是
this.SizeChanged+=new System.EventHandler(Form2\u SizeChanged)非常感谢!尝试此操作时捕获到NullReferenceException