2013-04-08 121 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