C#窗体程序,程序启动完成后,禁用任何键盘退出程序,自定义键盘组合键“G,B,C”才能退出程序的完整代码
时间: 2024-09-13 20:08:47 浏览: 33
在C#中,如果你想要防止程序通过默认的键盘组合(如Alt+F4)直接关闭,并且只允许用户通过特定的自定义组合键(例如"Ctrl+G", "Ctrl+B", 或 "Ctrl+C")来退出程序,你可以使用`FormClosing`事件和`Keys`枚举来实现这一功能。以下是一个简单的示例代码片段:
```csharp
using System;
using System.Windows.Forms;
public partial class MainForm : Form
{
private bool allowExit = true; // 标记是否允许正常关闭
private Keys exitKey = Keys.G | Keys.B | Keys.C; // 自定义的退出键组合
public MainForm()
{
InitializeComponent();
// 注册窗口关闭事件处理器
Closing += MainForm_Closing;
}
// FormClosing事件处理器
private void MainForm_Closing(object sender, CancelEventArgs e)
{
if (!allowExit) // 如果不允许关闭
return;
// 检查是否是期望的退出键组合
if (e.KeyCode == exitKey && ModifierKeys == Keys.Control) // 如果是Ctrl+G/B/C
{
OnCustomExit(); // 执行你的退出逻辑,然后设置允许关闭为假
allowExit = false;
e.Cancel = true; // 取消关闭操作
}
else
{
MessageBox.Show("只能使用快捷键 Ctrl+G, Ctrl+B, 或 Ctrl+C 退出程序。");
}
}
// 自定义的退出函数
private void OnCustomExit()
{
// 这里添加你希望在退出前完成的操作,比如保存数据等
// 示例:保存文件,清理资源等...
// ...
Application.Exit();
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.KeyCode == Keys.Escape) // 阻止Esc键直接关闭
{
e.Handled = true;
}
}
}
// 使用这个主窗体创建你的Windows Forms应用
[STAThread]
static void Main()
{
Application.Run(new MainForm());
}
```
在这个代码中,我们首先在`MainForm`构造函数中注册了`FormClosing`事件处理器,当试图关闭窗口时,检查是否是预期的组合键。如果不是,显示提示消息并阻止关闭。
另外,我们在`OnKeyDown`方法中拦截了Esc键,防止直接按Esc退出。
请注意,这只是一个基本的示例,实际项目中你可能需要更复杂的逻辑来处理各种特殊情况,比如如何优雅地处理异常情况等。记得在`OnCustomExit`方法中添加你所需的退出逻辑。
阅读全文