Alt 键跳过 KeyDown、KeyUp 事件

问题描述 投票:0回答:1

如果我按下某个键,然后触摸 Alt 键,则按下的键不会触发 KeyUp 事件,直到下次我按下重复的键(即“aaaaaaaaa...”)。就像当您不使用停用或失去焦点事件并且单击离开时,您所持有的键将继续。

我尝试使用预览键向下和预览键向上来捕捉 Alt 键按下的情况。我什至尝试过在按下 Alt 键时释放每个键,但是在按下 Alt 键和另一个键停止之间存在延迟。

我不一定要禁用 Alt+F4 等功能。我故意不在我的应用程序中将 Alt 键用于任何目的。但用户可能会按 Alt 键并遇到此问题。

我尝试了一些我在这里找到的其他东西,但其他的超出了我的能力。

如果有帮助的话,我不想检查每个键的 IsKeyDown。

c# wpf visual-studio winforms
1个回答
0
投票

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;
      
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.