2

我的 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;
}

我怎样才能解决这个问题?

4

2 回答 2

5

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

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();
于 2013-04-24T23:32:43.770 回答
3

将表格 1 ( this) 传递给表格 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;
于 2013-04-24T23:47:18.827 回答