7

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

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

这是我的代码:

// 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 中输入一个值,然后,如果该文本框已经有一个字符,焦点将移至下一个文本框并在那里输入值(这是我的代码导致这种情况发生)。但是恼人的哔哔声似乎是随机的——我还没有弄清楚哔哔声的模式(有时会,有时不会)......有没有人遇到过类似的事情,或者,更好的是,知道如何抑制蜂鸣声?我所做的只是按下键盘上方的“1”或“2”键。

4

2 回答 2

3

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

在上面的链接中,他们以按钮为例:

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

于 2012-05-19T00:16:52.937 回答
1

试试这个

    e.SuppressKeyPress = true;
于 2012-05-18T23:57:58.077 回答