将kepypress事件添加到基本计算器表单

时间:2018-06-22 22:28:15

标签: c#

我在Visual Studio中制作了一个基本的计算器表单,该表单可以使用鼠标单击事件来完全正常运行。我正在尝试添加键盘按下事件,以便您可以使用键盘或鼠标,但是在弄清楚它时遇到了麻烦。

我为按键事件添加了一些代码,但是如果我先单击按钮,则有效。如果我选​​择其他数字,键盘事件将停止工作。

//Code that handles click events
private void number_Click(object sender, EventArgs e)
    {
        if((txtResult.Text == "0")||(operation))
        {
            txtResult.Clear();
        }           
        //Cast button to the object sender
        operation = false;
        Button button = (Button)sender;
        //If the button pressed is a "." then check if the txtResult already contains
        //a ".", if it does contain a "." then do nothing
        if (button.Text == ".")
        {
            if (!txtResult.Text.Contains("."))
            {
                txtResult.Text = txtResult.Text + button.Text;
            }
        }else
        txtResult.Text = txtResult.Text + button.Text;
    }


//Keyboard press event code

    private void num1_key(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == '1')
        {
//If keyboard '1' pressed perform number_click()
            btn1.PerformClick();
            e.Handled = true;
        }
    }

我有什么明显的失踪或我走错了路吗?

1 个答案:

答案 0 :(得分:2)

更新后的答案

如果您仍然遇到问题,您需要做的是删除前面的代码,并使用下面的代码。

    //Have your form's KeyPress event like this, replace textBox1 with the name of your textbox
    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {
        switch (e.KeyChar)
        {
            case '0':
                textBox1.Text += "0";
                break;

            case '1':
                textBox1.Text += "1";
                break;

            case '2':
                textBox1.Text += "2";
                break;

            case '3':
                textBox1.Text += "3";
                break;

            case '4':
                textBox1.Text += "4";
                break;

            case '5':
                textBox1.Text += "5";
                break;

            case '6':
                textBox1.Text += "6";
                break;

            case '7':
                textBox1.Text += "7";
                break;

            case '8':
                textBox1.Text += "8";
                break;

            case '9':
                textBox1.Text += "9";
                break;
            case '.':
                textBox1.Text += ".";
                break;
        }

        e.Handled = true;
    }

具有这样的表单加载事件。

    private void Form1_Load(object sender, EventArgs e)
    {
        this.KeyPreview = true;
    }

旧答案

您需要做的就是在窗体上创建KeyPress事件,如下所示。

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == '1')
    {
        btn1_Click(null, null);
    }
    else if (e.KeyChar == '2')
    {
        btn2_Click(null, null);
    }
    //Go write your code with else if.........

}

然后,如您想在窗体中的焦点处捕获KeyPress事件,下面的代码将上述KeyPress事件添加到窗体上的所有控件,以便您可以在窗体中的焦点处捕获KeyPress事件。表格。

private void Form1_Load(object sender, EventArgs e)
{
    foreach (Control ctrl in Controls)
    {
        ctrl.KeyPress += Form1_KeyPress;
    }
}

如@Rufus L在回答中所提到的,您可以只使用KeyPreview属性,该属性将在实际控件收到以下代码之前捕获其他控件的KeyPress事件。

private void Form1_Load(object sender, EventArgs e)
{
    this.KeyPreview = true;
}