我的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;
}
我怎样才能解决这个问题?
答案 0 :(得分:5)
您的问题是Form2
Parent
属性为null,调用Show()
方法实际上并未设置显示的Form的Parent
属性(在调试器中检查) 。最简单的解决方法是通过Form1
(称为Form
)的构造函数传递Form2
(调用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 :(得分: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;