有些键盘比其他键盘更健谈吗?

Posted

技术标签:

【中文标题】有些键盘比其他键盘更健谈吗?【英文标题】:Are some keyboards more loquacious than others? 【发布时间】:2012-05-18 23:25:56 【问题描述】:

首席开发人员说,当他使用我的应用程序时,当他通过方向箭头键在 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”键。

【问题讨论】:

真是个好问题!我可能只是因为我一直在读坏书而感到厌倦,但这真的给我留下了深刻的印象。你选择了一个聪明但相对描述性的标题,实际上让我微笑。您已经简洁准确地描述了您的问题,并且您已包含相关代码以用于复制目的。这值得比我更多的支持。 【参考方案1】:

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

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

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

【讨论】:

谢谢;正如您所提到的,我将考虑更改我的 PreviewKeyDown 事件;但是,我的代码可以按原样工作。只是想让键盘“安静”一下。 @Clay 我知道它会起作用,但是由于您需要停止击键的传播,因此您无法在 PreviewKeyDown 事件中选择【参考方案2】:

试试this:

    e.SuppressKeyPress = true;

【讨论】:

那不是PreviewKeyDownEventArgs的成员 不是,但它是 KeyEventArgs 的成员。

以上是关于有些键盘比其他键盘更健谈吗?的主要内容,如果未能解决你的问题,请参考以下文章

用过的来说说,MacBook和Thinkpad比,打字手感差很多吗

苹果macbook,键盘失灵,只有电源键有用,其他的都失灵了,连灯都不亮,图和型号如下,求解

将 TabBarView 中的其他选项卡更改为其他选项卡时,键盘仍然显示

我想用键盘在 div 上选择文本(就像我们用鼠标选择文本一样)

Android点击其他任意位置收起软键盘

其他语言的 Qt 键盘输入