2013-04-24 198 views
1

我有两种形式为我的C#应用​​程序。其主要形式有其控制盒设置为false,然后创建第二种形式,像这样:如何从子窗体设置父窗体WindowState属性?

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

你得到什么错误? – alexm 2013-04-24 23:28:23

回答

4

您的问题是Form2Parent属性为空,调用Show()方法实际上并没有设置显示表(检查它在调试器)的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的代码,你可以改变为:在表格2

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

它的工作原理,直到你在Visual Studio中生成它并在另一台计算机上运行它..它说未处理的异常 – 2013-04-24 23:57:01

+1

我怀疑问题是在我提出的代码中,也许是别的什么地方...? – 2013-04-24 23:59:42

+0

得到它的工作!父窗体设置为_form1_后,必须手动配置事件处理程序。所以'this.SizeChanged + = Form2_SizeChanged;'应该是'this.SizeChanged + = new System.EventHandler(Form2_SizeChanged);'非常感谢! – 2013-04-25 00:17:47

3

通行证形式1(this)的公共财产和修改它的形式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; 
+0

当我尝试这个时,NullReferenceException被捕获 – 2013-04-25 00:04:22

相关问题