【问题标题】:Get Windows.Forms.KeyEventArgs Key Enum int value in WPF [duplicate]在WPF中获取Windows.Forms.KeyEventArgs Key Enum int值[重复]
【发布时间】:2019-08-07 12:37:17
【问题描述】:

我想捕获按键并获取 e.Key Enum int 值。


这会捕获并显示被按下的键。

XAML

<ToggleButton x:Name="btnDPad_L"
              Content="{Binding DPad_L_Text}" 
              HorizontalAlignment="Left" 
              VerticalAlignment="Top"
              Margin="80,172,0,0" 
              Height="30"
              Width="30" 
              PreviewKeyDown="btnDPad_L_PreviewKeyDown" />

C#

private void btnDPad_L_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
    int keyEnum = (int)e.Key; // Capture

    MessageBox.Show(e.Key.ToString());   // Letter
    MessageBox.Show(keyEnum.ToString()); // Enum
}

问题

这给出了System.Windows.Input Micrcorosft Keys Enum int 值。

System.Windows.Input.Keys Enum

W = 66  
A = 44   
S = 62  
D = 47  

我需要 System.Windows.Forms KeyEventArgs 不同的 int 值。

System.Windows.Forms.Keys Enum

W = 87  
A = 65  
S = 83  
D = 68  

错误

当我尝试使用 System.Windows.Forms.KeyEventArgs 时出现错误:

“btnDPad_L_PreviewKeyDown”没有重载匹配委托“KeyEventHandler”

我尝试将处理程序附加到Window_Loaded 事件:

btnDPad_L.KeyDown += new System.Windows.Forms.KeyEventArgs(btnDPad_L_PreviewKeyDown);

无法从“方法组”转换为“键”

【问题讨论】:

标签: c# wpf xaml


【解决方案1】:

您可以使用KeyInterop Class 将 WPF 键转换为 WinForms 并将 WinForms 键转换为 WPF。

KeyInterop 类提供了在 Win32 虚拟键和 WPF 键枚举之间进行转换的静态方法。

示例:

private void btnDPad_L_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
    var wpfKey = e.Key;
    // Add System.Windows.Forms to references
    var winFormsKey = (Keys)KeyInterop.VirtualKeyFromKey(wpfKey);
    // TODO: ...
}

【讨论】:

    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 2014-02-10
    • 2014-01-09
    相关资源
    最近更新 更多