【问题标题】:Set Arrow Keys As Input Keys - WinForms [duplicate]将箭头键设置为输入键 - WinForms [重复]
【发布时间】:2025-09-22 10:00:01
【问题描述】:

我需要在KeyDown 事件中检测箭头键击。我知道它们需要设置为输入键,但我不清楚如何在 C++ 中完成它。找到了很好的答案 hereherehere。但那是 C#,我需要 C++。尝试像here 描述的那样实现在PreviewKeyDown 中有此代码,但没有运气。

switch (e->KeyCode)
{
    case Keys::Down:
    case Keys::Up:
    case Keys::Right:
    case Keys::Left:
    case Keys::Space:
    e->IsInputKey = true;
       break;
}

我的KeyDown 有:

if (e->KeyCode == Keys::Left)
{
    ///
}

按左键不起作用。

我错过了什么?

【问题讨论】:

  • 你想让我们说什么?您已经链接了回答您问题的相关链接。考虑发布您的代码,并完整地描述问题。 :)
  • 如果我不够清楚,我很抱歉。我想在 C++ 中实现它。我不知道如何翻译 cpp 链接中的代码。我的问题是,更清楚地说,KeyDown 事件正在检测除箭头键、返回、制表符和空格之外的所有键。所以我认为我需要的是正确覆盖 IsInputKey 属性的 cpp 代码
  • 你不要覆盖它,你应该在 previewkeydown 中调用它,如上一个链接中所述;)
  • 好吧,我说我试过了……这是我 previewkeydown 中的代码。不起作用.. previewkeydown
  • switch (e->KeyCode) { case Keys::Down: case Keys::Up: case Keys::Right: case Keys::Left: case Keys::Space: e->IsInputKey =真;休息; }

标签: c++ winforms


【解决方案1】:

这是一个如何捕获按键的 C++ 示例: C++ Detect when user presses arrow key

这里是 KeyDown 事件的 MSDN 文档以及一些 C++ 代码示例: https://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown(v=vs.110).aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1

希望有帮助。

【讨论】:

  • 我看到了那个..但我不在控制台应用程序上工作..它是一个表单应用程序。但是谢谢第二个链接。
【解决方案2】:

我设法解决了。

对于任何面临相同问题的人,当我为表单中的每个控件添加事件PreviewKeydownKeyDown事件时,它起作用了,但不适用于表单。

【讨论】: