【发布时间】: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);
无法从“方法组”转换为“键”
【问题讨论】:
-
您使用的是 WPF 还是 windows 窗体?事件的参数类
KeyEventArgs不是事件处理程序委托类型。你想要System.Windows.[Input or Forms as appropriate].KeyEventHandler——或者更好的是,只需添加裸委托:btnDPad_L.KeyDown += btnDPad_L_PreviewKeyDown;。如果它是正确的原型就好了。 -
@EdPlunkett 我在 WPF 中。经过更多研究,我发现如何将键值从
Input转换为Forms这里 stackoverflow.com/a/1153059/6806643 -
听起来不像,但也许这就是你想要的? stackoverflow.com/a/25071604/3225
-
使用这个:
Enum.TryParse(e.Key.ToString(), out System.Windows.Forms.Keys winFormsKey)