gpt4 book ai didi

C# - Window.Current.CoreWindow.GetKeyState 未按预期工作

转载 作者:行者123 更新时间:2023-12-02 20:44:46 25 4
gpt4 key购买 nike

我正在使用 C# 开发一个简单的通用 Windows 应用程序。我有一个 RichEditBox,并且在使用 Control+I 组合键时发现了奇怪的行为,由于某种原因,它会插入一个 Tab(这是预期的吗?)。因为我想要组合键来切换斜体字体样式,所以我认为最好的方法是通过 KeyDown 事件。所以,这是我的代码:

    private void richbox_KeyDown(object sender, KeyRoutedEventArgs e)
{
System.Diagnostics.Debug.Write("\nKeyDown : " + e.Key.ToString());
if (e.Key == VirtualKey.Tab)
{
richbox.Document.Selection.TypeText("\t");
e.Handled = true;
}
else if (Window.Current.CoreWindow.GetKeyState(VirtualKey.Control) == Windows.UI.Core.CoreVirtualKeyStates.Down)
{
//If Control is pressed down, check if current key is B,I,U...
System.Diagnostics.Debug.Write(" => Control is down!");
switch (e.OriginalKey)
{
case VirtualKey.B:
toogleBold();
e.Handled = true;
break;
case VirtualKey.I:
e.Handled = true;
toogleItalic();
break;
case VirtualKey.U:
toogleUnderline();
e.Handled = true;
break;
}

}
}

我的问题是,当我按下 Control 键时,Else If 上的条件并不总是为真。我想了解为什么以及我可以做些什么来解决它。如果我运行代码并按几次控制键,这就是输出:

KeyDown : Control => Control is down!

KeyDown : Control

KeyDown : Control => Control is down!

KeyDown : Control

...

提前致谢:)

最佳答案

我尝试了您的代码并使用调试器输出来查看这些情况下 Ctrl 的实际状态:

var state = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control);
Debug.WriteLine(state);

我发现,当你第二次按下该键时,它的状态不是Down,而是Down|Locked,更具体地说是Windows.UI .Core.CoreVirtualKeyStates.Down | Windows.UI.Core.CoreVirtualKeyStates.Locked。事实证明,CoreVirtualKeyStates 是一个标志枚举,它可以同时具有多个值。在这种情况下,您正在与 == 进行比较,这意味着您没有获得匹配项。您可以首先使用 HasFlag 方法或按位 AND (&) 获取正确的值,然后进行比较,就可以开始了!

这意味着:

else if ( Window.Current.CoreWindow.GetKeyState(VirtualKey.Control).
HasFlag( CoreVirtualKeyStates.Down ) )
{
//rest of the code
}

或者这个:

else if ( 
( Window.Current.CoreWindow.GetKeyState(VirtualKey.Control) &
Windows.UI.Core.CoreVirtualKeyStates.Down )
== CoreVirtualKeyStates.Down )
{
//rest of the code
}

关于C# - Window.Current.CoreWindow.GetKeyState 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44784989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com