2013-09-01 2 views
1

Как в мире установить попытку и уловить, чтобы пользователь не вводил несколько десятичных знаков. Это попытка и улов? Или что именно я хочу здесь сделать? Очень новое для приложений с окнами ...Сложность с попытками и уловками?

Также можно заметить ... когда я нажимаю на вычисления, числа исчезают .. он не постоянно остается там. Я думал, что это странно. Кто-нибудь знает, почему? Например, если я ударил 6 + 6 он показывает «6», а затем еще один «6», а затем 12, а не дисплей 6 + 6 = 12 Я не понимаю, что либо

EDIT: Вот обновленный код. У меня есть все, что я до сих пор не понимаю, как постоянно писать код. Любые предложения приветствовали, как я застрял ...

public partial class Form1 : Form 
{ 
    char c; 
    double num1; 
    double num2; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 
    private void btn0_Click(object sender, EventArgs e) 
    { 
     txtBox.Text += 0; 
    } 
    private void btn1_Click(object sender, EventArgs e) 
    { 
     txtBox.Text += 1; 
    } 
    private void btn2_Click(object sender, EventArgs e) 
    { 
     txtBox.Text += 2; 
    } 
    private void btn3_Click(object sender, EventArgs e) 
    { 
     txtBox.Text += 3; 
    } 
    private void btn4_Click(object sender, EventArgs e) 
    { 
     txtBox.Text += 4; 
    } 
    private void btn5_Click(object sender, EventArgs e) 
    { 
     txtBox.Text += 5; 
    } 
    private void btn6_Click(object sender, EventArgs e) 
    { 
     txtBox.Text += 6; 
    } 
    private void btn7_Click(object sender, EventArgs e) 
    { 
     txtBox.Text += 7; 
    } 
    private void btn8_Click(object sender, EventArgs e) 
    { 
     txtBox.Text += 8; 
    } 
    private void btn9_Click(object sender, EventArgs e) 
    { 
     txtBox.Text += 9; 
    } 
    private void btnDecimal_Click(object sender, EventArgs e) 
    { 
     if (!txtBox.Text.Contains(".")) 
      txtBox.Text += "."; 
    } 
    private void btnAddition_Click(object sender, EventArgs e) 
    { 
     c = '+'; 
     num1 = double.Parse(txtBox.Text); 
     txtBox.Text = string.Empty; 
    } 
    private void btnSubtraction_Click(object sender, EventArgs e) 
    { 
     c = '-'; 
     num1 = double.Parse(txtBox.Text); 
     txtBox.Text = string.Empty; 
    } 
    private void btnMultiplication_Click(object sender, EventArgs e) 
    { 
     c = '*'; 
     num1 = double.Parse(txtBox.Text); 
     txtBox.Text = string.Empty; 
    } 
    private void btnDivision_Click(object sender, EventArgs e) 
    { 
     c = '/'; 
     num1 = double.Parse(txtBox.Text); 
     txtBox.Text = string.Empty; 
    } 
    private void btnClear_Click(object sender, EventArgs e) 
    { 
     txtBox.Clear(); 
    } 
    private void btnEqual_Click(object sender, EventArgs e) 
    { 
     num2 = double.Parse(txtBox.Text); 
     double result; 
     switch (c) 
     { 
      case '+': 
       result = num1 + num2; 
       txtBox.Text = result.ToString(); 
       break; 
      case '-': 
       result = num1 - num2; 
       txtBox.Text = result.ToString(); 
       break; 
      case '/': 
       if (num2!= 0) 
       { 
        result = num1/num2; 
        txtBox.Text = result.ToString(); 
       } 
       else 
       { 
        txtBox.Text = "You can't divide by zero... sign up for Math 100 please =)"; 
       } 
       break; 
      case '*': 
       result = num1 * num2; 
       txtBox.Text = result.ToString(); 
       break; 
     } 
    } 
} 

}

+1

Просто подсказка. [операторы switch] (http://msdn.microsoft.com/en-us/library/06tc147t%28v=vs.90%29.aspx) должны быть предпочтительнее над такими выражениями, как 'if (c == 1) else if (c == 2) и т. д. – Itay

+0

Почему это? Он работает быстрее с помощью case/switch или ...? Я все еще изучаю основы C#. – Zoro

+1

Операция 'switch case' в основном более читаема, чем' else if 'и на больших весах, она еще эффективнее – Itay

ответ

4

первую очередь вам не нужно попробовать поймать заявление. try catch предназначены для обработки исключений.

после очистки, что вы хотите, это единственный способ добавить текущий ввод в число, которое вы храните в памяти и отображаете его на экране. я не буду показывать вам код, потому что у вас есть много изменений, но в основном вы должны посмотреть на calculator example

+0

Я выяснил, как удержать ее от допуска нескольких десятичных знаков. Я все еще не понимаю, как хранить его в памяти и отображать его непрерывно. Не могли бы вы быть более конкретными? – Zoro

+0

кейс «+»: результат = num1 + num2; textBox1.Text = num1 + c + num2 + "=" + result.ToString(); break; – Zoro

+0

Это самое близкое из того, что я получил, но он не показывает его постоянно. Таким образом, пользователь все еще может видеть, каков был их вход, но не «постоянно» ... – Zoro

2

yes Вам не нужно. Попробуйте поймать. Заблокируйте его для обработки исключений, и вам нужно изменить свой код, так что вы можете попробуйте, это поможет вам ............

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace SimpleCalculator 
{ 
    public partial class frmCalculator : Form 
    { 
     string operand1 = string.Empty; 
     string operand2 = string.Empty; 
     string result; 
     char operation; 

     public frmCalculator() 
     { 
      InitializeComponent(); 
     } 

     private void frmCalculator_Load(object sender, EventArgs e) 
     { 
      btnOne.Click += new EventHandler(btn_Click); 
      btnTwo.Click += new EventHandler(btn_Click); 
      btnThree.Click += new EventHandler(btn_Click); 
      btnFour.Click += new EventHandler(btn_Click); 
      btnFive.Click += new EventHandler(btn_Click); 
      btnSix.Click += new EventHandler(btn_Click); 
      btnSeven.Click += new EventHandler(btn_Click); 
      btnEight.Click += new EventHandler(btn_Click); 
      btnNine.Click += new EventHandler(btn_Click); 
      btnZero.Click += new EventHandler(btn_Click); 
      btnDot.Click += new EventHandler(btn_Click); 
     } 

     void btn_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       Button btn = sender as Button; 

       switch (btn.Name) 
       { 
        case "btnOne": 
         txtInput.Text += "1"; 
         break; 
        case "btnTwo": 
         txtInput.Text += "2"; 
         break; 
        case "btnThree": 
         txtInput.Text += "3"; 
         break; 
        case "btnFour": 
         txtInput.Text += "4"; 
         break; 
        case "btnFive": 
         txtInput.Text += "5"; 
         break; 
        case "btnSix": 
         txtInput.Text += "6"; 
         break; 
        case "btnSeven": 
         txtInput.Text += "7"; 
         break; 
        case "btnEight": 
         txtInput.Text += "8"; 
         break; 
        case "btnNine": 
         txtInput.Text += "9"; 
         break; 
        case "btnZero": 
         txtInput.Text += "0"; 
         break; 
        case "btnDot": 
         if(!txtInput.Text.Contains(".")) 
          txtInput.Text += "."; 
         break; 

       } 
      } 
      catch(Exception ex) 
      { 
       MessageBox.Show("Sorry for the inconvenience, Unexpected error occured. Details: " + 
        ex.Message); 
      } 
     } 

     private void txtInput_KeyPress(object sender, KeyPressEventArgs e) 
     { 
      switch (e.KeyChar) 
      { 
       case '1': 
       case '2': 
       case '3': 
       case '4': 
       case '5': 
       case '6': 
       case '7': 
       case '8': 
       case '9': 
       case '0': 
       //case '+': 
       //case '-': 
       //case '*': 
       //case '/': 
       //case '.': 
        break; 
       default: 
        e.Handled = true; 
        MessageBox.Show("Only numbers, +, -, ., *,/are allowed"); 
        break; 
      }    
     } 

     private void txtInput_TextChanged(object sender, EventArgs e) 
     { 

     } 

     private void btnPlus_Click(object sender, EventArgs e) 
     { 
      operand1 = txtInput.Text; 
      operation = '+'; 
      txtInput.Text = string.Empty; 
     } 

     private void btnMinus_Click(object sender, EventArgs e) 
     { 
      operand1 = txtInput.Text; 
      operation = '-'; 
      txtInput.Text = string.Empty; 
     } 

     private void btnMulitply_Click(object sender, EventArgs e) 
     { 
      operand1 = txtInput.Text; 
      operation = '*'; 
      txtInput.Text = string.Empty; 
     } 

     private void btnDivide_Click(object sender, EventArgs e) 
     { 
      operand1 = txtInput.Text; 
      operation = '/'; 
      txtInput.Text = string.Empty; 
     } 

     private void btnEqual_Click(object sender, EventArgs e) 
     { 
      operand2 = txtInput.Text; 

      double opr1, opr2; 
      double.TryParse(operand1, out opr1); 
      double.TryParse(operand2, out opr2); 

      switch (operation) 
      { 
       case '+': 
        result = (opr1 + opr2).ToString(); 
        break; 

       case '-': 
        result = (opr1 - opr2).ToString(); 
        break; 

       case '*': 
        result = (opr1 * opr2).ToString(); 
        break; 

       case '/': 
        if (opr2 != 0) 
        { 
         result = (opr1/opr2).ToString(); 
        } 
        else 
        { 
         MessageBox.Show("Can't divide by zero"); 
        } 
        break; 
      } 

      txtInput.Text = result.ToString(); 
     } 

     private void btnClear_Click(object sender, EventArgs e) 
     { 
      txtInput.Text = string.Empty; 
      operand1 = string.Empty; 
      operand2 = string.Empty; 
     } 

     private void btnSqrRoot_Click(object sender, EventArgs e) 
     { 
      double opr1; 
      if (double.TryParse(txtInput.Text, out opr1)) 
      { 
       txtInput.Text = (Math.Sqrt(opr1)).ToString(); 
      } 
     } 

     private void btnByTwo_Click(object sender, EventArgs e) 
     { 
      double opr1; 
      if (double.TryParse(txtInput.Text, out opr1)) 
      { 
       txtInput.Text = (opr1/2).ToString(); 
      } 
     } 

     private void btnByFour_Click(object sender, EventArgs e) 
     { 
      double opr1; 
      if (double.TryParse(txtInput.Text, out opr1)) 
      { 
       txtInput.Text = (opr1/4).ToString(); 
      } 
     } 
    } 
} 
+0

вы должны поместить операцию как перечисление и все кнопки операндов, как вы это делали с числами. я знаю, что это не ваш код, а исправление кода Azzamean, но вы должны хотя бы упомянуть его –

Смежные вопросы