3

再会,

我想在表单用户控件中添加关键侦听器。其中包含在一个主窗体中。

当用户在我的应用程序中按下一个键时,我希望它做一些事情。

我该怎么做呢?

例如。如果我按下 w,则会出现一个弹出窗口,说你按下了 w。

我已经在我的用户控制类中尝试过这个;

  private void UC_ControlsTank_KeyPress(object sender, KeyPressEventArgs e)
    {
        Console.Write("You pressed:" + e.KeyChar);
    }

但是当我按下按键时,似乎什么也没有发生。

编辑:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
        MessageBox.Show(e.KeyChar.ToString());
    }
}

这是我的表格:这是我在视觉工作室中链接它的方式: 在此处输入图像描述

4

3 回答 3

13

首先,在捕获 KeyPress 之前,您必须将KeyPreviewWin Form 的属性设置为true. 除非您将其设置为 true,否则不会捕获 KeyPress。

于 2013-11-11T14:09:40.697 回答
5

有一个KeyPressed你可以使用的事件

Control.KeyPress 事件

System.Windows.Forms.KeyEventArgs e会告诉你按下了什么键

编辑:

所以我只是在一个示例应用程序上尝试了这个,它运行良好

    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
        MessageBox.Show(e.KeyChar.ToString());
    }
于 2013-11-11T11:50:07.777 回答
2

这是一个例子,

  private void control_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyData)
        {
            case Keys.W:
                {
                   MessageBox.Show("you pressed w");
                    break;
                }
            case Keys.B:
                {
                   MessageBox.Show("you pressed b");
                    break;
                }
            case Keys.F11:
                {
                   MessageBox.Show("you pressed F11");
                    break;
                }
            case Keys.Escape:
                {
                    this.Close();
                    break;
                }
            default:
                {
                    break;
                }
        }
}

或者

使用 ProcessKeyPreview 在用户控件中引用此Overriding Keydown

于 2013-11-11T11:53:35.420 回答