c# - 如何检测(Shift+Delete)按键?

标签 c# winforms keypress onkeydown

我正在使用 C# winform 制作自定义终端。当用户按下我正在使用的 TextBox 中的某个键时,我必须确保它是一个有效键。我需要阻止他们删除内容并为所欲为。我设法通过 KeyPressKeyDown 事件处理退格键和删除键以及其他操作。我遇到了用户按 shift + delete 的问题。它像 backspace 一样删除内容。我不知道它的整数等价物是什么。我做了一个 C++ 程序来检测它,很简单:

char c = _getch();
cout << (int)c << endl;

我得到了一个 -32。它在 C# 中不起作用。

围了这么多圈,结果发现是0。 它起作用了,至少在昨天是这样,但现在不起作用了。我还可以使用 shift+delete 删除内容。

这是我的关键验证方法:

private bool IsInvalidKey(char key)
{
  bool condition1 = !IsAsciiKey(key) && !IsNavigatingKey(key); // by navigation I mean: left, right, end and home keys.
  bool condition2 = (GetCaretPosition() == CaretPosition.OutsideCommandLine && !IsNavigatingKey(key));
  bool condition3 = ((key == (char)Keys.Back) && GetCaretPosition() == CaretPosition.BeginningOfCommandLine);
  return (condition1 || condition2 || condition3);
}

private bool IsAsciiKey(char key)
{
  return ((int)key > 0 && (int)key <= 127); // char(0) should be shift+delete
}

我如何检测这个键以及在哪里(在什么情况下,KeyPressKeyDown?)

我使用的是普通的 TextBox 控件,而不是 RichTextBox

最佳答案

您可以在 KeyDown 事件中尝试类似的操作。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Shift && e.KeyCode == Keys.Delete) e.Handled = true;
}

关于c# - 如何检测(Shift+Delete)按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12356944/

相关文章:

c# - 可空和泛型

c# - (Ironpython/Winforms) 从 for 循环中创建的文本框中检索值

winforms - 如何将包含数据库的 Windows 窗体应用程序部署到另一台 PC?

javascript - 如何在纯 JavaScript 对象(非 DOM)上创建按键事件系统

python - 在 Python 3 中识别按键的代码

c# - 用于 C# 的最佳免费 Excel 编写器,用于将数据表输出到 excel

c# - Sitecore 动态占位符允许渲染

jquery keypress() 事件获取文本

c# - 使用 TextBox 实时过滤 ListBox

c# - 在 TextBox 上处理 KeyUp 时静音叮声