首席开发人员说,当他使用我的应用程序时,当他通过方向箭头键在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”键。
答案 0 :(得分:3)
在PreviewKeyDownEvent中没有办法像普通的KeyDown事件那样处理/抑制KeyEvent。文档建议将PreviewKeyDownEventArgs.IsInputKey属性设置为true,以便处理KeyDown事件中通常不可用的按键。
从上面的链接,他们使用一个按钮作为例子:
某些控件通常会忽略某些按键,例如TAB,RETURN,ESC和箭头键,因为它们不被视为输入键按下...通过处理Button的PreviewKeyDown事件并设置IsInputKey属性如果为true,则可以在按下箭头键时引发KeyDown事件。但是,如果您处理箭头键,焦点将不再移动到上一个或下一个控件。
答案 1 :(得分:1)
尝试this:
e.SuppressKeyPress = true;