2012-08-13 37 views
1

我使用兩種形式,當第二種形式出現時禁用第一種形式。當第二個窗體關閉時,我無法找到啓用第一個窗體的方法。 傳遞參數可能是一個解決方案,但我敢打賭有一個更簡單的方法。 首先,我想到在第二個析構函數上啓用第一個窗體,但不能這樣做。 任何人有任何建議?如何在使用第二種形式時更改第一種形式的屬性?

+0

爲什麼不只是打開第二個窗體爲模態?當第二個窗體打開時,它將自動處理第一個窗體的暫停執行。 – 2012-08-13 13:32:11

+2

請在StackOverflow上運行搜索,這個問題已經出現*很多。*您的第二個表單需要引用第一個表單,可以在其上調用方法或更改屬性。 – Adam 2012-08-13 13:34:28

+1

@codesparkle你是對的,這裏有很多話題。看起來像創建自定義事件,代表是正確的軌道。 – Bora 2012-08-13 13:42:38

回答

2

您可以使用ShowDialog()顯示第二個窗體 - 窗體將顯示爲模態,第一個窗體僅在第二個窗體關閉時啓用。

對於未來的問題,你可以在第二種形式有現場有第一個實例,使用該實例,如果需要,例如,你可以使用自定義構造函數:由於已經提到

class SecondForm: Form 
{ 
    FirstForm _parentForm; 

    public SeconForm(FirstForm form) 
    { 
     InitializeComponent(); 
     _parentForm = form; 
    } 

    void DoSomethingWithParent() 
    { 
     _parentForm.DoSomesting(); 
    } 
} 
+0

它按我的預期工作。這解決了我的答案,但仍然在尋找未來類似問題的答案! – Bora 2012-08-13 13:38:29

2

,在這種特定情況下,使用模式對話框打開第二個表單可能很有意義。

爲了說明不適用的情況,已接受的最佳做法是先訂閱第二個表格的FormClosing事件,並在事件處理程序中啓用「自己」並執行其他任何操作您可能想要因其他表單被關閉而執行此操作。這裏是一個簡單的例子:

public partial class ParentForm : Form 
{ 
    private void button1_Click(object sender, EventArgs e) 
    { 
     ChildForm child = new ChildForm(); 

     child.FormClosing += new FormClosingEventHandler(child_FormClosing); 
     Hide(); 
     child.Show(); 
    } 

    private void child_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     Show(); 
    } 
} 
+0

'child.FormClosing + = child_FormClosing;'如果您使用.NET的最新版本就足夠了 – Adam 2012-08-13 13:56:48

+0

@codesparkle是的,它會的,但VS代碼自動生成代碼,所以它實際上需要更多的工作來改變它到那個分類器版本。如果我在沒有代碼完成的情況下在記事本中全部輸入,實際上我會做出幾個額外的更改。 (例如,我會使用lambda而不是新方法。) – Servy 2012-08-13 14:10:04

相關問題