2011-09-04 144 views
98

我有一個模式對話框,需要隱藏關閉(X)按鈕,但我不能使用 ControlBox = false,因爲我需要保持最小化和最大化按鈕。Windows窗體:如何隱藏關閉(x)按鈕?

我需要隱藏只是關閉按鈕,有沒有辦法做到這一點?

非常感謝!

更新:我有權限禁用它,這是更簡單:)謝謝大家!

+0

你錯了,我不希望禁用按鈕的選項,但隱藏它..你能找到解決方案嗎? –

+8

需要是一個強大的詞彙。這個要求來自哪裏?什麼是實際要求 - 用戶不能終止程序,或者UI「看起來沒有關閉按鈕」?因爲還有其他的方法,你很難完全關閉它們(例如任務管理器,taskkill,可能是alt + f4等)。我個人不會在這方面努力工作,因爲除非你重新剝皮你的整個應用程序,否則將浪費精力,打破用戶對其他Windows程序的期望/連續性。 –

+4

@Sayem它揭示了這個頁面,所以不要成爲這樣的評論家。 –

回答

110

您無法隱藏它,但可以通過重寫窗體的CreateParams屬性來禁用它。

private const int CP_NOCLOSE_BUTTON = 0x200; 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams myCp = base.CreateParams; 
     myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON ; 
     return myCp; 
    } 
} 

來源:http://www.codeproject.com/KB/cs/DisableClose.aspx

+0

謝謝,我發現這個解決方案,但我們想隱藏它,而不僅僅是禁用:(anywat謝謝! –

+3

除了從頭開始設計你的表單, –

+0

是的。控制箱沒有關閉按鈕,然後隱藏父窗體的控制框 – Bahamut

25

嗯,你可以將其隱藏,通過移除整個系統菜單:

private const int WS_SYSMENU = 0x80000; 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams cp = base.CreateParams; 
     cp.Style &= ~WS_SYSMENU; 
     return cp; 
    } 
} 

當然,這樣做將刪除最小化和最大化按鈕。

如果您保留系統菜單但刪除了關閉項目,則關閉按鈕將保留但被禁用。

最後一種選擇是自己繪製非客戶區域。很難做到這一點。

+1

這也適用,gr吃!但* ControlBox = false *很容易使用。 – simmeone

+0

這與將ControlBox設置爲false相同。此外,它不符合以下要求:_I需要保持最小化和最大化按鈕_ – whiteshooz

7

如果您確實想要隱藏它,如「不可見」,那麼您可能必須創建無邊界窗體並自己繪製標題組件。 VisualStyles庫有可用的Windows元素。您還必須重新添加重新調整表單或通過抓取標題欄來移動表單的功能。更不用說角落裏的系統菜單了。

在大多數情況下,很難證明「關閉」按鈕不可用,特別是當您需要使用最小化功能的模式窗體時。最小化模式形式確實沒有意義。

106

我們可以通過設置this.ControlBox=false;

+23

您是否閱讀過他指定的問題? – Servy

+21

做了Google搜索和這個SO QA是最受歡迎的。這個答案就是我一直在尋找的。謝謝Abhishek ... –

+11

隱藏所有這些尺寸按鈕。不只是X. –

1

在你的窗體的屬性隱藏窗體關閉按鈕設置「控制盒」 =假,但它會隱藏最小化和最大化爲好。

2

那麼你可以從屬性部分或編程方式在構造函數中使用改變FormBorderStyle隱藏關閉按鈕:

public Form1() 
{ 
InitializeComponent(); 
this.FormBorderStyle = FormBorderStyle.None; 
} 

然後創建一個菜單條項目退出應用程序。

歡呼

0

如果這是你可以設置

this.FormBorderStyle = FormBorderStyle.None; 

然後重新創建最小化和最大化按鈕

private void button1_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Maximized; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Minimized; 
    } 
相關問題