如果我按下某个键,然后触摸 Alt 键,则按下的键不会触发 KeyUp 事件,直到下次我按下重复的键(即“aaaaaaaaa...”)。就像当您不使用停用或失去焦点事件并且单击离开时,您所持有的键将继续。
我尝试使用预览键向下和预览键向上来捕捉 Alt 键按下的情况。我什至尝试过在按下 Alt 键时释放每个键,但是在按下 Alt 键和另一个键停止之间存在延迟。
我不一定要禁用 Alt+F4 等功能。我故意不在我的应用程序中将 Alt 键用于任何目的。但用户可能会按 Alt 键并遇到此问题。
我尝试了一些我在这里找到的其他东西,但其他的超出了我的能力。
如果有帮助的话,我不想检查每个键的 IsKeyDown。
if (e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z && e.Alt){ //Do SomeThing }
如果您想在WPF(.NET 8)中实现类似的功能,您可以尝试以下代码。
<Window x:Class="WpfApp3.MainWindow"
...
PreviewKeyDown="Window_PreviewKeyDown" PreviewKeyUp="Window_PreviewKeyUp"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<StackPanel>
<Button Content="main"/>
<TextBox Height="40"/>
</StackPanel>
</Window>
隐藏代码:
private bool altKeyPressed = false;
private void Window_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key >= Key.A && e.Key <= Key.Z && Keyboard.IsKeyDown(Key.LeftAlt))
{
altKeyPressed = true;
}
}
private void Window_PreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
if (altKeyPressed && e.Key >= Key.A && e.Key <= Key.Z)
{
altKeyPressed = false;
}
}