2014-03-04 2 views
0

이 계산기를 C#으로 만들었습니다. 하나의 문제가 있습니다. 키보드를 1과 같이 누르면 잘못된 결과가 두 번 나타납니다. 나는 정확한 결과를 얻지 못합니다.keypress를 사용할 때 두 번 결과

가 대단히 감사합니다, 당신은 내가 뭘 잘못 알고 계십니까!

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; 
     } 
    } 
} 
+0

디자이너에서도 이벤트 처리기를 선언 했습니까? 아마도 Calculator.designer.cs도 KeyPress 이벤트 핸들러를 선언하고있을 것입니다. –

+0

_ "나는 정확한 결과를 얻지 못합니다."_ 그래서 어떤 결과를 얻었습니까? –

+0

예 : 키보드에서 1을 누르면 결과는 11입니다. VS 2010으로 디버깅하고 Calculator_Keypress 함수를 두 번 실행했습니다. –

답변

0

:이 정보를 확인하세요. 그것은 당신의 의견을 두 배로 늘리는 것입니다.

제거하면 예상대로 작동합니다.

0

키 누르기에서 KeyUp으로 변경했습니다. 그런 식으로 키가 해제되자 마자 시작됩니다.

편집 : 당신은 당신이 라인 result.Text += e.KeyChar.ToString();에 쓴대로 result.Text (result입니다 가정 당신의 TextBox 항목)으로 된 keyChar 추가 할 필요가 없습니다 Difference between the KeyDown Event, KeyPress Event and KeyUp Event in Visual Studio

+0

지원해 주셔서 감사합니다. 나는'switch '코드 앞에'if (! e.Handled)'를 추가했다. –

관련 문제