2011-12-19 72 views
1

我知道這是非常簡單的問題,但我正在尋找整潔乾淨的建議。我的應用程序是一個MDI應用程序。創建了一個在整個應用程序中使用的基礎表單。有幾種表單我們不希望用戶關閉,以避免我們計劃不允許用戶關閉這些表單的人爲錯誤。如何限制用戶關閉Winform c#

我試圖在表單關閉事件中設置e.cancel = true,但它似乎不起作用有人可以給我一些建議嗎?

編輯:

Private void FrmTask_FormClosing(object sender, FormClosingEventArgs e) 
     {   
       e.Cancel = true; 
     } 

的問題是,當我使用這個代碼,沒有任何形式的在我的MDI應用程序被關閉,甚至主要MDI父窗體。

+0

你的意思是防止關閉窗口?甚至停止這個過程? – Tudor 2011-12-19 16:34:57

+1

代碼smaple會有幫助。 e.Cancel = true;應該做的伎倆。 – 2011-12-19 16:35:03

+3

請向我們展示您設置'e.Cancel = true'的代碼;' – Fischermaen 2011-12-19 16:35:16

回答

2

你也可以不顯示關閉按鈕:

http://blogs.msdn.com/b/atosah/archive/2007/05/18/disable-close-x-button-in-winforms-using-c.aspx

科迪格雷也不允許ALT-F4鍵關閉的意見提供了更好的鏈接:

https://stackoverflow.com/a/4655948/366904

+1

但用戶可以使用Alt + F4關閉窗體。 – Fischermaen 2011-12-19 16:38:23

+1

是的,這是禁用關閉按鈕的錯誤*方法。正如Fischermaen所述,用戶仍然可以使用鍵盤關閉窗口。相反,您應該將'CS_NOCLOSE'樣式添加到窗口類,如[在此解釋](http://stackoverflow.com/a/4655948/366904)所述。 – 2011-12-19 16:42:03

+0

@CodyGray很好找!我會更新答案以包含您的鏈接。如果您將其作爲答案發布,我會提高您的滿意度,希望能給您提供公認的標題。 – 2011-12-19 17:45:51

2

推測這裏的問題是你希望窗口在應用程序存在時關閉,但如果用戶試圖手動關閉它,則不會。

要做到這一點,你將不得不有一個手動覆蓋,比如定義一個名爲allowShutdown的變量,並且有一個方法可以在MdiParent關閉時進行設置。

private void Form_Closing(object sender, EventArgs e) 
{ 
    if(!allowShutdown) e.Cancel = true; 
} 

public void ForceShutdown() 
{ 
    allowShutdown = true; 
    Close(); 
} 

,然後在父窗體:

private void Form_Closing(object sender, EventArgs e) 
{ 
    if(childForm != null) childForm.ForceShutdown(); 
} 

這是假設您維護您的父窗體的子窗體的引用,當您創建它。將其與隱藏另一篇文章中提到的關閉按鈕的能力相結合,你應該有一個工作解決方案。

+0

是的,這可能會起作用,但這是一個相當不好的解決方案。您阻止用戶在不告知用戶他們不允許關閉表單的情況下關閉表單。他們會坐在那裏白白點擊「X」按鈕,什麼都不會發生。絕對沒有線索,他們不允許關閉窗口。我鏈接到上面的[解決方案](http://stackoverflow.com/a/4655948/366904)是一個更好的選擇。它最大限度地減少了您在每個表單中編寫的代碼數量,並且使用戶清楚地知道他們不允許關閉窗口。 – 2011-12-19 16:49:25

+0

哈哈哈,不會有消息顯示不會關閉儀表板,因爲這是獲取實時數據,但爲了避免人爲錯誤,我們正在實施此解決方案。 – Shax 2011-12-19 16:57:38

+0

我說要在另一篇文章中實現這個視覺變化。 – samjudson 2011-12-19 17:08:38