如何开始使用C#测试按键事件?

4

我对编程语言还比较陌生,因此首先想通过尝试按键组合事件来熟悉该环境。特别是alt+k键组合。 我正在使用Microsoft Visual c# 2010 Express进行开发。 我想测试这段代码是否有效。 如果发现错误,请告知我 :)。

public void begin(object sender, KeyEventArgs ev)
{
    if (ev.KeyCode == Keys.K && ev.Modifiers == Keys.Alt)
    {
        //display a message
    }
}

即使我理论上知道在点击新项目时提供的不同项目模型及其用途,但我尝试了多个模型都没有成功地测试该代码。 简而言之,我不知道选择哪些模型以及在何处放置代码来测试这种简单代码,并更精确地在极简GUI中处理事件(键+鼠标)。 有人能帮助我告诉我如何具体开始使用C#中的事件吗? 谢谢提前 :)

5
选择一个 WinForms 项目。 - Steve
2个回答

2

MSDN文档提供了一个很好的例子来说明您需要做什么。以下是一些重要部分:

  • 从一个简单的“Windows Forms”应用程序开始。虽然还有许多其他类型的应用程序,但WinForms是最简单的。
  • 连接KeyPress事件。在表单构造函数中,您需要告诉它在获得KeyPress事件时要执行什么操作。如果您在上面的问题中将函数begin的名称更改为Form1_KeyPress(以更准确地描述它的功能),则下面的代码应该可以工作:

    this.KeyPress += new KeyPressEventHandler(Form1_KeyPress);

  • 使用KeyPressEventArgs而不是KeyEventArgs可能会产生很大的差异,但是最好在可能的情况下使用最具体的EventArgs,以便您可以使用特定于它的属性。

  • 注意KeyPressEventArgs.Handled如果您在表单上的其他对象(例如按钮或文本框)上有KeyPress(或其他某些键盘事件),则需要说明事件是否在那里处理还是是否应该冒泡到父级(在您的情况下,是Form)。

编辑(感谢@RBarryYoung):

  • 在表单构造函数中设置this.KeyPreview = true为了使您的表单接收在子控件上发生的键盘事件(例如按钮和文本框),如上一个提示所提及的那样,您需要将此属性设置为true,以允许表单首先查看在子控件上发生的键盘事件。 (注意:当然,此提示和上一个提示仅适用于您希望表单看到这些事件的情况。有时,您可能希望快捷键在子控件中被捕获而不是在父控件中处理。)

1
不要忘记将 KeyPreview 设置为 true。 - RBarryYoung
好的,我明白了,谢谢。我会从Windows窗体应用程序开始学起,但是有一件事我不太清楚,这个语法 “this.KeyPress += new KeyPressEventHandler(Form1_KeyPress)” 是什么意思? - user2305415

0

它可以帮助你:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.K && this.AcceptButton == null)
    {
        MessageBox.Show("Key K pressed");
    }

    return base.ProcessCmdKey(ref msg, keyData);
}

它将检测您表单上任何控件中是否按下了键K,并返回消息框。 测试一下并尝试以您自己的方式使其工作。

1
谢谢,我全局理解你的代码,但有一个不清楚的点:AcceptButton == null 代表什么? - user2305415

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接