C# Winform 键盘按键 KeyDown KeyUp 触发失败

原因: KeyDown 与 KeyUp 是在用户控件中,按键触发事件是在主窗口处理,需要将主窗口的事件传递给用户控件 解决办法 主窗口 添加: Robot robot = new(); //子窗口 private void MainWindow_KeyDown(object sender, Key

原因:

KeyDownKeyUp 是在用户控件中,按键触发事件是在主窗口处理,需要将主窗口的事件传递给用户控件

解决办法

主窗口

添加:

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。

LICENSED UNDER CC BY-NC-SA 4.0
Comment