【问题标题】:Keypress To Simulate A Button Click in C#C#中的按键模拟按钮点击
【发布时间】:2010-12-20 22:02:51
【问题描述】:

好的,所以我正在制作一个井字游戏来帮助我学习 C#。 我正在尝试为其添加一些功能,因此我希望人们能够使用计算机上的 NumPad 来模拟单击按钮。

这就是我所拥有的,但是当我使用 NumPad 时,按钮不会单击。 你们中的任何人都可以找到原因吗?

    //===============================
    // start NumPad Simulate Clicks
    //   NumPad  MyButtons
    //   7 8 9   1 2 3
    //   4 5 6   4 5 6 
    //   1 2 3   7 8 9
    //===============================
    public void myControl_NumPad7(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad7)
        {
            button1_Click(null, null);
        }
    }
    public void myControl_NumPad8(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad8)
        {
            button2_Click(null, null);
        }
    }
    public void myControl_NumPad9(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad9)
        {
            button3_Click(null, null);
        }
    }
    public void myControl_NumPad4(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad4)
        {
            button4_Click(null, null);
        }
    }
    public void myControl_NumPad5(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad5)
        {
            button5_Click(null, null);
        }
    }
    public void myControl_NumPad6(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad6)
        {
            button6_Click(null, null);
        }
    }
    public void myControl_NumPad1(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad1)
        {
            button7_Click(null, null);
        }
    }
    public void myControl_NumPad2(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad2)
        {
            button8_Click(null, null);
        }
    }
    public void myControl_NumPad3(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.NumPad3)
        {
            button9_Click(null, null);
        }
    }

【问题讨论】:

    标签: c# click keypress simulate


    【解决方案1】:

    编辑
    注意到我必须更清楚我的意思......

    根据您发布的代码,我怀疑您有 9 个控件添加了关键事件。这些控件只有在获得焦点时才会接收按键事件。

    要全局处理表单的键,您必须将Form.KeyPreview 设置为true。另外,我不会像您那样处理密钥,而是添加一个 Form.KeyDown 事件并编写如下内容:

    switch (e.KeyCode)
    {
        case Keys.NumPad9:
            e.Handled = true;
            button3.PerformClick();
            break;
        case Keys.NumPad8:
            e.Handled = true;
            button2.PerformClick();
            break;
        // And so on
    }
    

    这将处理表单中的 NumPad 键 - 然后您可以删除您在问题中发布的所有事件处理程序。

    要以编程方式“单击”按钮,您应该使用Button.PerformClick() 方法,因为可能会向单击事件添加多个事件处理程序,否则不会调用。

    编辑 2
    switch 语句的语法无效。当然,每个“案例”都必须以 case 关键字开头......现在它应该可以工作了。

    【讨论】:

    • 这似乎是我要找的东西,但我不知道把你的代码放在哪里。我设置 KeyPreview = true;当 Form1 初始化之后我就卡住了。
    • 只需在表单的属性(属性窗口)中设置即可。在“属性”窗口中,将视图更改为事件部分,查找 KeyDown 事件并双击该项目。这会在您的代码中添加一个新事件 Form_KeyDown,您可以在其中放置我的代码。或者,转到表单的源代码并键入“override” - 从 Code Insight 窗口中,选择“OnKeyDown”方法。为您生成一个存根。在“base.OnKeyDown”行之后,添加我的代码。
    • 我刚试过,恐怕还是不行。当我将 : 替换为 ; 时,我发现一些错误减少了。主要的是。没有要中断或继续的封闭循环(这些来自 break;) 只有赋值、调用、递增、递减和新对象表达式可以用作语句。 (x3) (我在 Keys.NumPad 和 switch 的右括号上得到这个。
    • 糟糕,抱歉,我的示例中 switch 语句的语法错误。我会更新我的回复。
    【解决方案2】:

    您需要为每个按钮使用button1.PerformClick(); 才能正确调用事件,这里是info

    【讨论】:

      猜你喜欢
      • 2015-06-28
      • 2012-12-16
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      相关资源
      最近更新 更多