我的Windows应用程序中有5个按钮。当我单击箭头键时,焦点在按钮之间切换,然后只有
KEYUP
事件解雇。如何阻止这个?
答案 0 :(得分:1)
订阅PreviewKeyDown
活动。
当焦点在此控件上时按下某个键时,在KeyDown事件之前发生。
当您浏览按钮时,sender
参数将包含先前选择的按钮。
我找到了适合您的解决方案,改编自here。显然,MS决定箭头键不会触发KeyDown
事件,因此您无法取消它们。
一种解决方法是指定箭头键是普通输入键,就像任何其他键一样。然后KeyDown
事件将会触发,如果需要,您可以取消按下按钮。
private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
e.IsInputKey = true;
}
private void button1_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
您可能需要阅读that post中的其他答案和评论,看看哪种情况最适合您的情况。
答案 1 :(得分:0)
在评论中回答您的问题
void button1_LostFocus(object sender, EventArgs e)
{
button1.Focus();
}
答案 2 :(得分:0)
要防止 Up 从Button
移动焦点,您必须至少使用3种方法:
bool _focus;
private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Up)
_focus = true;
}
private void button1_KeyUp(object sender, KeyEventArgs e)
{
_focus = false;
}
private void button1_Leave(object sender, EventArgs e)
{
if(_focus)
button1.Focus(); // or (sender as Control)
}
当用户按 Up 并在Leave
中返回焦点时,使用标记。您必须在KeyUp
中取消标记,否则无法更改焦点(按 Tab 示例)。
你可以在Leave
中取消标记,我没有测试它。