C# 使用按键时会产生双重效果

C# 使用按键时会产生双重效果,c#,calculator,C#,Calculator,我用C#制作了这个计算器,我有一个问题:当我按键盘上类似于1的键时,它会给我不正确的结果—双倍数字。我没有得到正确的结果 你知道我做错了什么吗 多谢各位 namespace Calculator { public partial class Calculator : Form { Double value = 0; String operation = ""; int i = 0; bool operation_pr

我用C#制作了这个计算器,我有一个问题:当我按键盘上类似于1的键时,它会给我不正确的结果—双倍数字。我没有得到正确的结果

你知道我做错了什么吗

多谢各位

namespace Calculator
{
    public partial class Calculator : Form
    {
        Double value = 0;
        String operation = "";
        int i = 0;
        bool operation_pressed = false;
        bool button_dot = false;
        OperationClass class1 = new OperationClass();
        public Calculator()
        {
            InitializeComponent();
            this.KeyPreview = true;
            this.KeyPress += new KeyPressEventHandler(Calculator_KeyPress);
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void Calculator_Load(object sender, EventArgs e)
        {

        }

        private void Calculator_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((result.Text == "0") || (operation_pressed))
                result.Clear();
            switch (e.KeyChar)
            {
                // key press from 0-9
                case (char)48:
                case (char)49:
                case (char)50:
                case (char)51:
                case (char)52:
                case (char)53:
                case (char)54:
                case (char)55:
                case (char)56:
                case (char)57:
                    e.Handled = true;
                    result.Text += e.KeyChar.ToString();
                    break;
            }
        }

        private void button_Click(object sender, EventArgs e)
        {
            if ((result.Text == "0") || (operation_pressed))
                result.Clear();
            operation_pressed = false;
            Button b = (Button)sender;
            result.Text = result.Text + b.Text;
        }

        private void operator_click(object sender, EventArgs e)
        {
            Button b = (Button)sender;
            operation = b.Text;
            value = Double.Parse(result.Text);
            operation_pressed = true;
            equation.Text = value + " " + operation;
        }

        private void buttonCE_Click(object sender, EventArgs e)
        {
            result.Text = "0";
            equation.Text = "";
            button_dot = false;
        }

        private void buttonC_Click(object sender, EventArgs e)
        {
            result.Clear();
            value = 0;
        }

        private void buttonEqual_Click(object sender, EventArgs e)
        {
            equation.Text = "";
            button_dot = false;
            operation_pressed = true;
            if (operation != "")
                result.Text = class1.GetResult(operation, value, result.Text);
            else
                result.Text = result.Text + "";
        }

        private void buttonDot_Click(object sender, EventArgs e)
        {
            Button b = (Button)sender;
            if ((!button_dot && !operation_pressed) || result.Text == "0")
                result.Text = result.Text + b.Text;
            button_dot = true;
        }
    }
}

我会把它从按键改为按键。这样,它只会在钥匙松开时启动


编辑:检查此信息:

您不需要在
结果中追加keychar。Text
(假设
结果
是您的
文本框
项),正如您在第
。这条线是你输入的两倍


删除它,它将按预期工作。

您是否也在设计器中声明了事件处理程序。可能Calculator.designer.cs还声明了一个按键事件处理程序。例如:当我在键盘上按1时,结果是11。我用VS 2010进行调试,函数计算器(Keypress)运行了两次。请不要在问题标题中包含关于所用语言的信息,除非没有它就没有意义。标签就是为了这个目的。谢谢你的支持!我在
开关之前添加
if(!e.Handled)