有没有办法禁用Windows窗体上的退出按钮,而无需导入一些外部.dll?我通过使用以下代码导入dll来禁用退出按钮,但我不喜欢它.有更简单的(内置)方式吗?
public Form1() { InitializeComponent(); hMenu = GetSystemMenu(this.Handle, false); } private const uint SC_CLOSE = 0xf060; private const uint MF_GRAYED = 0x01; private IntPtr hMenu; [DllImport("user32.dll")] private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); [DllImport("user32.dll")] private static extern int EnableMenuItem(IntPtr hMenu, uint wIDEnableItem, uint wEnable); // handle the form's Paint and Resize events private void Form1_Paint(object sender, PaintEventArgs e) { EnableMenuItem(hMenu, SC_CLOSE, MF_GRAYED); } private void Form1_Resize(object sender, EventArgs e) { EnableMenuItem(hMenu, SC_CLOSE, MF_GRAYED); }
Bevan.. 5
您无法轻松禁用退出按钮(右上角关闭表单的按钮).
但是,您可以通过将ControlBox
属性设置为false来完全隐藏按钮.
ControlBox
可以随时打开和关闭,所以如果你想在某些时候动态允许关闭,而不是在其他时候,你可以使用它.
或者,您可以处理FormClosing事件并在您选择时取消关闭.
这是一个演示.
创建一个新的Windows窗体项目.
使用Text"ControlBox"删除表单上的CheckBox控件.将其Click事件连接到此:
private void checkBox1_CheckedChanged(object sender, EventArgs e) { ControlBox = checkBox1.Checked; }
然后,使用文本"取消关闭"在表单上删除第二个CheckBox控件.将表单的FormClosing事件连接到此:
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = checkBox2.Checked; }
运行应用程序并开始使用复选框.你很快就会看到事情是如何运作的.
您无法轻松禁用退出按钮(右上角关闭表单的按钮).
但是,您可以通过将ControlBox
属性设置为false来完全隐藏按钮.
ControlBox
可以随时打开和关闭,所以如果你想在某些时候动态允许关闭,而不是在其他时候,你可以使用它.
或者,您可以处理FormClosing事件并在您选择时取消关闭.
这是一个演示.
创建一个新的Windows窗体项目.
使用Text"ControlBox"删除表单上的CheckBox控件.将其Click事件连接到此:
private void checkBox1_CheckedChanged(object sender, EventArgs e) { ControlBox = checkBox1.Checked; }
然后,使用文本"取消关闭"在表单上删除第二个CheckBox控件.将表单的FormClosing事件连接到此:
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = checkBox2.Checked; }
运行应用程序并开始使用复选框.你很快就会看到事情是如何运作的.
要禁用表单上的关闭按钮,只需在表单关闭事件上编写以下代码。
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; }