2015-08-16 38 views
1

我有一個winforms應用程序,我希望關閉按鈕在程序的右上角,而不是最小化程序。是否可以禁用「關閉」按鈕,同時仍然可以從其他地方關閉?

我已經能夠通過使用窗體的FormClosing事件這樣來實現這一目標:

this.Hide(); 
e.Cancel = true; 

但這也不幸停止任何其他關閉按鈕我在窗體上放置。

有沒有辦法只停止在右上方的默認按鈕,但仍然能夠關閉窗體在其他地方?

+0

設置一個布爾標誌。 –

+0

@ DanielA.White你可以更具體地瞭解一個布爾值如何有用嗎?謝謝。 –

回答

2

這是一個簡單的布爾例如:

bool ExitApplication = false; 

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{ 
    switch(ExitApplication) 
    { 
     case false: 
     this.Hide(); 
     e.Cancel = true; 
     break; 

     case true: 
     break; 
    } 
} 

所以,當你想關閉應用程序只需設置ExitApplication爲true。

+0

更好的方法是檢查'FormClosingEventArgs中的'CloseReason'' –

0

使用此選項來禁用右上角窗體中的關閉按鈕。

public partial class Form1 : Form 
{ 
    const int MfByposition = 0x400; 
    [DllImport("User32")] 
    private static extern int RemoveMenu(IntPtr hMenu, int nPosition, int wFlags); 
    [DllImport("User32")] 
    private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); 
    [DllImport("User32")] 
    private static extern int GetMenuItemCount(IntPtr hWnd); 
    public Form1() 
    { 
     InitializeComponent(); 
     var hMenu = GetSystemMenu(Handle, false); 
     var menuItemCount = GetMenuItemCount(hMenu); 
     RemoveMenu(hMenu, menuItemCount - 1, MfByposition); 
     ... 
    } 
} 
+0

對不起,但對我來說看起來有些複雜。 –

+0

我想了解我使用的是什麼,不僅僅是複製別人的作品,謝謝! –

+0

這只是來自user32的原生DLL方法調用。 –

0

另一種方式在右上角禁用「X」:

public partial class Form1 : Form 
{ 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    protected override CreateParams CreateParams 
    { 
     get 
     { 
      const int CS_NOCLOSE = 0x200; 
      CreateParams cp = base.CreateParams; 
      cp.ClassStyle |= CS_NOCLOSE; 
      return cp; 
     } 
    } 

} 

形式仍然可以通過編程方式與this.Close();關閉。

相關問題