2012-03-05 73 views
0

美好的一天。我有一個問題,我使用的WPF,我無法找到正確的方式來關閉窗體form1。從其他表格關閉Wpf表格

WpfForm form1 = new WpfForm(); 
form1.close(); 

請我需要幫助。

+2

你有什麼已經嘗試過?如果你不想緊密結合表單(不是一個好主意),你可能需要某種消息傳遞,但這些東西取決於你正在構建的系統,只有這幾行代碼我們無法猜測什麼是什麼你真的想做。 – Carsten 2012-03-05 16:40:07

+2

WPF使用[Window class](http://msdn.microsoft.com/en-us/library/system.windows.window.aspx)並且具有[close](http://msdn.microsoft.com /en-us/library/system.windows.window.close.aspx)方法,你顯示你的'WpfForm'派生自窗口?那麼你面臨的問題是什麼? – gideon 2012-03-05 16:42:52

回答

1

您需要在第二個表格中引用您的第一個表單。然後你可以簡單地使用該參考來調用close。

有幾種方法來處理它。你可以添加一個屬性到你的第二個表單,以保存對你的第一個表單的引用。在創建第二個表單時,您將設置該屬性,然後在第二個表單中的任何事件應關閉第一個表單(例如,單擊一個按鈕)時,可以使用該引用關閉表單。

2

正如馬特所說你需要在你的第一種形式的第二種形式中有一個引用,所以假設你將有這個引用,你可以簡單地添加一個事件處理程序,如下面在第一個形式代碼當第二個表單的引用被設置爲一個實例時,類似於你的Window_Loaded事件將是一個很好的候選人。

secondWindow.Closing += (s, e) => this.Close(); 

上面是一個內聯事件處理程序,如果你寧願有更詳細的代碼,你可以這樣做:

secondWindow.Closing += CloseMe; 

private void CloseMe(Object sender, EventArgs e) 
{ 
    this.Close(); 
} 

櫃面你有興趣,飛碟雙向先生討論了內聯事件處理程序在另一個問題的警告here

+0

+1,因爲它是基於事件的方法 – 2012-03-06 15:03:23

1

至於說馬特和保利,你需要在你的第一種形式的引用,所以如果你想做到這一點沒有一個參考,你可以使用靜態訪問修飾符和代表喜歡這裏;

public delegate void Method(); 
    private static Method close; 

    public Form1() 
    { 
     InitializeComponent(); 
     close = new Method(Close); 
    } 

    public static void CloseForm() 
    { 
     close.Invoke(); 
    } 

接下來在你的第二個表格,您可以關閉的第一個沒有引用編寫簡單:

Form1.CloseForm();