【问题标题】:Why does e.Handled = true not stop key processing in this case?为什么 e.Handled = true 在这种情况下不会停止密钥处理?
【发布时间】:2020-11-22 15:09:47
【问题描述】:

我有这个代码。当我在toolFolderName(工具栏文本框)获得焦点时按 Enter 键时,Enter 键处理得很好。然后,尽管e.Handled = true; 触发了filesDataGridView_KeyUp 事件。奇怪的是(或者也许不是,你决定),如果我在toolFolderName_KeyPress 中设置一个断点,并在执行中断时点击继续,而不做任何其他事情,击键不会传播到 DGV 事件。

我意识到我同时使用了KeyUpKeyPress 事件。 e.Handled 不适用于这些事件吗?我想要一个工具栏文本框和一个 DGV 在同一个表单上使用 Enter 键,每个都有自己的目的。我应该采取什么方法?

private void toolFolderName_KeyPress(object sender, KeyPressEventArgs e)
{
    if ((Keys)e.KeyChar == Keys.Return)
    {
         // code
         // code
         e.Handled = true;//does this not mean "Hey, every control on this form,
                          //ignore this keystroke, it has been handled?"
    }
}

private void filesDataGridView_KeyUp(object sender, KeyEventArgs e)
{
    // receives Enter key despite e.Handled in toolFolderName_KeyPress
    if (e.KeyCode == Keys.Return)
    {
        // processing code
        e.Handled = true;
    }
}

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    e.Handled 仅适用于该事件。如果您还想抑制对 KeyUp 的处理,则必须在 KeyUp 处理程序中使用相同的逻辑,或在 KeyDown 处理程序中设置一个标志(很可能是bool),告诉 KeyUp 处理程序也忽略其 KeyUp 事件。

    【讨论】:

    • 谢谢,但你能澄清一下吗?这两个事件都有 e.Handled,那么你的意思是它只适用于哪个事件?另外,我不想抑制 KeyUp 句柄。我只想在 DGV 控件没有焦点因此没有业务处理密钥时抑制它。为什么它甚至会收到击键?
    • KeyDown => e.SuppressKeyPress = true。将此设置为true 也会设置e.Handled = truee.Handled 不会抑制按下的键,它只是阻止事件传递到底层控件。
    • @Jim 不幸的是,击键从KeyPress 事件变为KeyDown 事件(在不同的控件中)。 SuppressKeyPressKeyDown 属性,所以当我 可以 设置它时,为时已晚。我希望KeyDown 事件根本不触发。
    • KeyPressKeyDown 之后提出。在KeyDown 中设置e.SuppressKeyPress = true,您会抑制按下的键,因此会抑制KeyPress 事件。不是KeyUp,那是另一回事。
    • 我不明白你的意思:如果你想抑制Key Pressed,你在想要抑制的Control的KeyDown中设置e.SuppressKeyPress = true键和KeyPress 事件。 e.Handled = true 不会将事件发送(到 Windows)以进行进一步处理。 -- 不知道另一个控件的KeyUp 事件与此有什么关系。你应该展示// code // code 在做什么。移动焦点还是让它移动?在控件中按 Enter 键不会无缘无故地在另一个控件中引发事件。
    猜你喜欢
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多