C# 使用按键时会产生双重效果
我用C#制作了这个计算器,我有一个问题:当我按键盘上类似于1的键时,它会给我不正确的结果—双倍数字。我没有得到正确的结果 你知道我做错了什么吗 多谢各位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
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)
。