gpt4 book ai didi

.net - 如何在源头处理关闭(大 X)按钮?

转载 作者:行者123 更新时间:2023-12-01 13:06:34 24 4
gpt4 key购买 nike

我们希望在某些情况下阻止标题栏中关闭按钮的操作。问题是它是一个 MDI 应用程序,似乎我们必须在每个窗体中添加代码以取消 Closing 事件处理程序中的操作。似乎子窗体是第一个接收到该事件的窗体。没有办法在一个地方添加代码来取消关闭操作。欢迎提供有关关闭事件如何传播到子窗体的信息。有没有一种简单的方法可以完成我们想做的事情?

最佳答案

Windows 提供了一种方法,您可以修改系统菜单。也提供了很好的反馈,关闭按钮实际上看起来是禁用的。您可以在系统菜单中禁用 SC_CLOSE 命令。最好用示例表单进行演示,通过在其上放置一个按钮开始:

using System.Runtime.InteropServices;
...

public partial class Form1 : Form {
public Form1() {
InitializeComponent();
button1.Click += new EventHandler(button1_Click);
}

private bool mCloseEnabled = true;
public bool CloseEnabled {
get { return mCloseEnabled; }
set {
if (value == mCloseEnabled) return;
mCloseEnabled = value;
setSystemMenu();
}
}

protected override void OnHandleCreated(EventArgs e) {
base.OnHandleCreated(e);
setSystemMenu();
}
private void setSystemMenu() {
IntPtr menu = GetSystemMenu(this.Handle, false);
EnableMenuItem(menu, SC_CLOSE, mCloseEnabled ? 0 : 1);
}
private const int SC_CLOSE = 0xf060;
[DllImport("user32.dll")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool revert);
[DllImport("user32.dll")]
private static extern int EnableMenuItem(IntPtr hMenu, int IDEnableItem, int wEnable);

private void button1_Click(object sender, EventArgs e) {
CloseEnabled = !CloseEnabled;
}
}

关于.net - 如何在源头处理关闭(大 X)按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2692922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com