-->

的KeyDown识别左,右方向箭头键,而不是上下(KeyDown recognizes the le

2019-09-17 02:55发布

用下面的代码,左,预期右箭头键的功能,但向上和向下箭头无法识别(通过它加强,前两个条件都满足适当的,但后两个永远是):

private void textBox1_KeyDown(object sender, KeyEventArgs e) {
    TextBox tb = (TextBox)sender;

    if (e.KeyCode.Equals(Keys.Left)) {
        SetFocusOneColumnBack(tb.Name);
        e.Handled = true;
        return;
    }
    if (e.KeyCode.Equals(Keys.Right)) {
        SetFocusOneColumnForward(tb.Name);
        e.Handled = true;
        return;
    }
    if (e.KeyCode.Equals(Keys.Up)) {
        SetFocusOneRowUp(tb.Name);
        e.Handled = true;
        return;
    }
    if (e.KeyCode.Equals(Keys.Down)) {
        SetFocusOneRowDown(tb.Name);
        e.Handled = true;
        return;
    }
}

为什么会变成这样,我怎么能解决这个问题?

UPDATE

这是我看到的时候我将鼠标悬停在e.Keycode同时步进通过。 如果我按

  • ...左箭头键,我看到: e.KeyCode = "LButton | MButton | Space"
  • ...右箭头键,我看到: e.KeyCode = "LButton | RButton | MButton | Space"
  • ...向上箭头键,我看到: e.KeyCode = "RButton | MButton | Space"
  • ...向下箭头键,我看到: e.KeyCode = "Backspace | Space"

这让我感到困惑(什么它显示我),但keyleft和keyright,进入我的代码 - 它永远不会是KEYUP和的keydown,不管我怎么努力握紧我的牙。

Answer 1:

捕获的Windows UI为导航某些键之前,他们每天会发送到您的形式。 如果你想覆盖这种行为,你需要重载IsInputKey方法(和子类文本字段):

    protected override bool IsInputKey(Keys keyData)
    {
        if (keyData == Keys.Right)
            return true;
        return base.IsInputKey(keyData);
    }


Answer 2:

我发现使用PreviewKeyDown不工作(我不得不删除了“e.Handled =真”的代码,因为它不PreviewKeyDown事件适用):

private void textBoxQH1_PreviewKeyDown(object sender,   PreviewKeyDownEventArgs e) {
    TextBox tb = (TextBox)sender;

    if (e.KeyCode.Equals(Keys.Up)) {
        SetFocusOneRowUp(tb.Name);
        return;
    }
    if (e.KeyCode.Equals(Keys.Down)) {
        SetFocusOneRowDown(tb.Name);
        return;
    }
}

因此,需要有三个不同的事件来处理我一直在寻找各种按键:按键响应为常规字符,的KeyDown非字符(左,右方向键),而这一次(PreviewKeyDown),用于向上和向下箭头键。



Answer 3:

您可以使用此代码:

private void TextBox1_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Up:
            //Do stuff
            break;
        case Keys.Down:
            //Do stuff
            break;
        case Keys.Left:
            //Do stuff
            break;
        case Keys.Right:
            //Do stuff
            break;
    }
}


Answer 4:

那么来不及为党,但如果有人有兴趣,使用e.KeyValue相反,作为一个例子, e.KeyValue左方向键是37和右箭头键39等。



文章来源: KeyDown recognizes the left and right directional arrow keys, but not up and down