好的,所以我正在制作一个Tic-Tac-Toe游戏来帮助我学习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);
        }
    }
有帮助吗?

解决方案

修改结果 注意到我必须更清楚我的意思......

根据您发布的代码,我怀疑您有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-Keys - 然后您可以删除您在问题中发布的所有事件处理程序。

以编程方式“点击”一个按钮,你应该使用 Button.PerformClick()方法,因为可以在click事件中添加多个事件处理程序,否则不会被调用。

编辑2
switch -statement的语法无效。当然,每个“案例”都包括在内。必须从 case 关键字开始......现在它应该可以工作。

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top