【发布时间】:2017-11-22 16:39:57
【问题描述】:
我有一个文本框和一个列表框。 Shift 必须清除列表框,Shift+Del 组合必须清除文本框。
这是我的代码。
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.Shift && e.KeyCode == Keys.Delete) textBox.Clear();
if (e.Shift) listBox.Items.Clear();
}
这显然是错误的,因为当 Shift 按下时,列表框总是被清除。我需要能够通过按 Shift+Del 来清除文本框,并且当时不清除列表框。
我只需要使用 Shift 和 Del 键,不能使用其他键。
那我该怎么办?
【问题讨论】:
-
只是忽略 shift 事件一小段时间,比如 500 毫秒?但有点不清楚你问的是什么。你不能用minimal reproducible example 演示你的问题吗?
-
哪些事件?你是如何监控键盘的?有代码吗?
-
非常不清楚您在谈论什么事件以及为什么您甚至单独“捕获”转变......显然您知道转变状态伴随着 KeyDown 事件(bing.com/search?q=c%23+keydown+shift),所以您应该询问别的东西 - 请edit 发帖澄清。
-
请详细说明您是如何捕获的。通常,您可以检查关键事件附带的修饰符标志,例如 Shift、Ctrl、Alt。您通常不会明确地听 shift 然后听另一个键。
-
我开始纠正一个答案,但实际上使用 Shift 作为实际键以及其他键的修饰符只是一个非常糟糕的主意。我只是建议您使用除 Shift、Ctrl 或 Alt 以外的任何东西来清除列表框项目。你有没有见过那些用于你正在做的功能的键?您可能没有这样做是有原因的;)
标签: c# winforms key keydown event-capturing