我有一個winforms應用程序,我希望關閉按鈕在程序的右上角,而不是最小化程序。是否可以禁用「關閉」按鈕,同時仍然可以從其他地方關閉?
我已經能夠通過使用窗體的FormClosing
事件這樣來實現這一目標:
this.Hide();
e.Cancel = true;
但這也不幸停止任何其他關閉按鈕我在窗體上放置。
有沒有辦法只停止在右上方的默認按鈕,但仍然能夠關閉窗體在其他地方?
我有一個winforms應用程序,我希望關閉按鈕在程序的右上角,而不是最小化程序。是否可以禁用「關閉」按鈕,同時仍然可以從其他地方關閉?
我已經能夠通過使用窗體的FormClosing
事件這樣來實現這一目標:
this.Hide();
e.Cancel = true;
但這也不幸停止任何其他關閉按鈕我在窗體上放置。
有沒有辦法只停止在右上方的默認按鈕,但仍然能夠關閉窗體在其他地方?
這是一個簡單的布爾例如:
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。
更好的方法是檢查'FormClosingEventArgs中的'CloseReason'' –
使用此選項來禁用右上角窗體中的關閉按鈕。
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);
...
}
}
對不起,但對我來說看起來有些複雜。 –
我想了解我使用的是什麼,不僅僅是複製別人的作品,謝謝! –
這只是來自user32的原生DLL方法調用。 –
另一種方式在右上角禁用「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();
關閉。
設置一個布爾標誌。 –
@ DanielA.White你可以更具體地瞭解一個布爾值如何有用嗎?謝謝。 –