2012-11-23 33 views
3

我使用按鈕Save,CloseCancel創建了一個用戶控件。我想在不保存「取消」按鈕的情況下關閉表單,提示一條消息保存在關閉按鈕上並保存,而不關閉保存按鈕。通常,我會在取消按鈕上使用this.Close(),但UserControl沒有這樣的選項。所以我想我必須爲此設置一個屬性。如何關閉用戶控件中的窗體

向下滾動"Questions that may already have your answer"節中,我遇到了這個問題:How to close a ChildWindow from an UserControl button loaded inside it?我用下面的C#代碼:

private void btnCancel_Click(object sender, EventArgs e) 
{ 
    ProjectInfo infoScreen = (ProjectInfo)this.Parent; 
    infoScreen.Close(); 
} 

這確實爲一個屏幕的工作,但我不知道如果我要申請這個代碼我擁有的所有屏幕?我認爲應該有一個更有效的方法。所以我的問題是:我是否需要爲每個表單應用此代碼,還是有另一種更有效的方法?

+0

控制不應該亂用他們的父母,引發一個事件來代替。 –

回答

16

可以使用

((Form)this.TopLevelControl).Close(); 
+0

我的答案做了我用它的訣竅(事實上控件直接嵌入到表單中)。但我更喜歡你的 – FJPoort

+0

作品就像一個魅力! – aozan88

0

我找到了簡單的答案:)我都準備好了這樣的想法。

要在ButtonClicked Event關閉WinForm的一個用戶控件中使用下面的代碼:

private void btnCancel_Click(object sender, EventArgs e) 
{ 
    Form someForm = (Form)this.Parent; 
    someForm.Close(); 
} 
+0

它取決於用戶控件是直接嵌入到窗體還是其他子控件中。使用TopLevelControl應該訣竅 –

2

您可以使用現有的FindForm方法對於任何控制:

private void btnCancel_Click(object sender, EventArgs e) 
{ 
    Form tmp = this.FindForm(); 
    tmp.Close(); 
    tmp.Dispose(); 
} 

不要忘記處理表單以釋放資源。

希望這會有所幫助。

0

您也可以使用遠程線程的代碼的任何部分關閉一個形式:

  MyNamespace.MyForm FormThread = (MyNamespace.MyForm)Application.OpenForms["MyForm"]; 
      FormThread.Close(); 
相關問題