我有一个关于 KeyCode
和禁用特殊键的问题。我知道这个问题被问过几次,但我没有找到我可以使用的答案,所以我来这里问 :)
我正在编写一个程序来阻止每个键或组合键(如 Alt+F4
等)。该应用程序不适合我,它适用于只能在此程序中导航的客户。一切正常,但我无法禁用 Left CTRL、Right CTRL 或 Alt
键。我得到了这个代码来尝试阻止这些键:
private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.LControlKey)
{
MessageBox.Show("LCtrl", "Warnung", MessageBoxButtons.OK);
}
else if (e.KeyCode == Keys.RControlKey)
{
MessageBox.Show("RCtrl", "Warnung", MessageBoxButtons.OK);
}
else if (e.KeyCode == Keys.Alt)
{
MessageBox.Show("Alt", "Warnung", MessageBoxButtons.OK);
}
else if (e.KeyCode == Keys.Delete)
{
MessageBox.Show("Delete", "Warnung", MessageBoxButtons.OK);
}
}
我只使用 MessageBox.Show();
看看它是否有效。 Delete
键工作正常,但另一个不行。是否可以在不编辑 registry
和 Win7 的情况下执行此操作?有谁知道为什么或可以给我提示吗?
干杯
编辑:我以这种方式阻止所有其他键: Blocking shortcut keys using c#
最佳答案
免责声明:我在用户输入类方面经验不多,但这是我的意见。
CTRL 和 ALT 是修饰键的示例。也就是说,它们修改其他(非修饰符)键来创建组合键。您的 UI 可能只能选择一个完整的组合键。例如:
private void keyPressed(object sender, PreviewKeyDownEventArgs e)
{
e.KeyCode == Key.A; // True (pressed A)
e.KeyCode == Key.Control; // False (no key pressed)
e.Modifiers == Keys.Control; // True (user is pressing the modifier CTRL)
e.KeyCode == Key.A && e.Modifiers == Keys.Control; (pressed key A with modifier CTRL)
}
至于禁用 key ,你可以捕获 e.Modifiers:
private void ignoreCtrl(object sender, PreviewKeyDownArgs e)
{
if (e.Modifiers != Keys.Control) { /* Pass to handler */ }
else { /* Discard */ }
}
同样,我对您的特定框架没有经验,但这是我的猜测。我使用了以下 SO 源:
关于c# - 使用 c# 在没有注册表的情况下禁用 Ctrl 或 Alt 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18889149/