原因:
KeyDown
与 KeyUp
是在用户控件中,按键触发事件是在主窗口处理,需要将主窗口的事件传递给用户控件
解决办法
主窗口
添加:
Robot robot = new(); //子窗口
private void MainWindow_KeyDown(object sender, KeyEventArgs e)
{
if (mainWindowPannel.Controls.Contains(robot) && !_keysPressed.Contains(e.KeyCode))
{
_keysPressed.Add(e.KeyCode);
robot.Robot_KeyDown(sender, e);
}
}
private void MainWindow_KeyUp(object sender, KeyEventArgs e)
{
if (mainWindowPannel.Controls.Contains(robot) && _keysPressed.Contains(e.KeyCode))
{
_keysPressed.Remove(e.KeyCode);
robot.Robot_KeyUp(sender, e);
}
}
子窗口
public void Robot_KeyDown(object sender, KeyEventArgs e)
{
MouseEventArgs mouseEventArgs = new(MouseButtons.Left, 1, 0, 0, 0); //触发其他按钮按下快捷键
switch (e.KeyCode)
{
case Keys.W:
Debug.WriteLine("W Down");
break;
case Keys.S:
Debug.WriteLine("S Down");
case Keys.A:
Debug.WriteLine("A Down");
break;
}
}
说明:
MouseButtons.Left:表示鼠标的哪个按钮被按下。在这个例子中,表示左键被按下。MouseButtons 是一个枚举类型,包含以下值:
• None:没有按钮被按下
• Left:左键
• Right:右键
• Middle:中键
• XButton1:第一个扩展按钮
• XButton2:第二个扩展按钮
1:表示点击次数。在这个例子中,表示单击。
0:表示鼠标指针的 x 坐标。在这个例子中,x 坐标为 0。
0:表示鼠标指针的 y 坐标。在这个例子中,y 坐标为 0。
0:表示鼠标滚轮的滚动量。在这个例子中,滚动量为 0。