2013-04-08 117 views
0

有两种形式 - Form1 & Form2.Form1有一个按钮(btnNew),它会在点击时打开Form2,并且被禁用。只有当Form2被关闭时,我需要再次启用按钮。用户需求同时使用Form1。此代码不能再次启用该按钮。我在哪里错过。

在Form1:从Form2访问Form1控件

private void btnNew_Click_1(object sender, EventArgs e) 
    { 
    Form2 f2 = new Form2(); 
    f2.Show(); 
    btnNew.Enabled = false; 
    } 
public void EnableButton() 
{ 
    btnNew.Enabled = true; 
} 

在窗体2:

private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
    { 
    Form1 f1 = new Form1(); 
    f1.EnableButton(); 
    } 
+0

您正在创建'Form1'的新实例。 – 2013-04-08 05:26:41

回答

0

从正在实例化的类内订阅您的Form2关闭事件它(Form1)。

private void btnNew_Click_1(object sender, EventArgs e) 
    { 
    Form2 f2 = new Form2(); 
    f2.Closing += f2_Closing; 
    f2.Show(); 
    btnNew.Enabled = false; 

    } 

public void f2_Closing(object sender, FormClosingEventArgs e) 
{ 
    this.EnableButton(); 
} 

public void EnableButton() 
{ 
    btnNew.Enabled = true; 
} 
+0

非常感谢,它工作了! 'f2.closing + ='表示订阅form2关闭event.right?但它在button_click里面。是否意味着,我可以放置“Form2 f2 = new Form2(); f2.Closing + = f2_Closing; ” form1对吗?你可以帮我理解,这是怎么工作的 – Ruby 2013-04-08 06:29:05

+0

是的,'+ ='操作符用于为事件订阅处理函数。至于你的其他问题,我想你会在阅读关于c#中的变量和方法范围时受益。 – 2013-04-08 07:01:50

1

您的代码创建一个新的Form1中,这将是在您的应用程序已经在运行的不同。

您可以尝试在Form2中添加对Form1的引用,并对其进行操作。

给窗口2就像一个属性:

public Form ParentForm {get; set;} 

,并指定它在你的按钮,单击Form:

Form2 f2 = new Form2() 
f2.ParentForm = this; 
f2.show(); 

然后在你关闭,你应该能够做一些事情,如:

this.ParentForm.EnableButton(); 
+0

谢谢。它确实给了我一个想法,但是我无法在'this.parentform'之后加载控制/函数名。我将继续处理它。再次感谢。 – Ruby 2013-04-08 06:19:38