有些键盘比其他键盘更加啰嗦吗?

时间:2012-05-18 23:25:56

标签: c# winforms arrow-keys beep keyeventargs

首席开发人员说,当他使用我的应用程序时,当他通过方向箭头键在TableLayoutPanel上的TextBoxes之间移动时,他的键盘会发出蜂鸣声。

但是,我没有听到这样的听觉活动。

这是我的代码:

// Had to intercept Up and Down arrows from Windows
private void textBoxPlatypi_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;
    }
}

private void textBoxPlatypi_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;
    }
}

..他想也许我需要“e.Handled”,但这在PreviewKeyDown事件中不可用。

有没有办法抑制哔哔声(显然只会出现某些键盘或特定设置(他使用的是Windows7,我还在使用XP)?

更新

我现在有了这个代码:

private void textBoxPlatypus1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
    switch (e.KeyCode) {
        case Keys.Down:
        case Keys.Up:
            e.IsInputKey = true;
            break;
    }
}

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

    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;
    }

    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;
    }
}

......但他仍然听到了哔哔声(我没有)。

他在阿拉斯加并使用Windows 7;我在加利福尼亚并使用XP。我不知道是否存在某些组合/不匹配的问题...

再次更新

我知道这可能会让一些人感到震惊,但阿拉斯加/加利福尼亚州的断线与此无关。我现在也听到了哔哔声,而且它不是来自箭头键。这是在TextBox中输入一个值然后,如果该文本框已经有一个字符,焦点将移动到下一个textBox并在那里输入值(这是我的代码导致这种情况发生)。但令人恼火的哔哔声似乎是随机的 - 我没有想出它何时发出哔哔声的模式(有时会发出哔哔声,有时候却没有)......有没有人碰过这样的事情,或者更好的是,知道如何抑制哔哔声?我正在做的就是按下键盘上方的“1”或“2”键。

2 个答案:

答案 0 :(得分:3)

PreviewKeyDownEvent中没有办法像普通的KeyDown事件那样处理/抑制KeyEvent。文档建议将PreviewKeyDownEventArgs.IsInputKey属性设置为true,以便处理KeyDown事件中通常不可用的按键。

从上面的链接,他们使用一个按钮作为例子:

  

某些控件通常会忽略某些按键,例如TAB,RETURN,ESC和箭头键,因为它们不被视为输入键按下...通过处理Button的PreviewKeyDown事件并设置IsInputKey属性如果为true,则可以在按下箭头键时引发KeyDown事件。但是,如果您处理箭头键,焦点将不再移动到上一个或下一个控件。

答案 1 :(得分:1)

尝试this

    e.SuppressKeyPress = true;