2013-10-31 33 views
0

所以我一直在這裏一段時間,仍然無法讓我的計算器做最後一件事。讓我的計算器在按下相同的按鈕後拍一個新號碼

我明白了,謝謝!

當我按下相同的按鈕或Tan,Sin,Cos或Mod按鈕後,我希望我的計算器拍攝一個新的數字。基本上就好像文本框中沒有任何內容,即使答案仍然存在。目前,所有的號碼保持不變,新的號碼被添加到最後。我不希望發生這種情況。

計算後,如果我按下數字按鈕,我希望它清除屏幕並添加新的數字。以下是我迄今爲止的代碼。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    Double FirstNumber; 
    string mathOperator = ""; 

    private void AddButton_Click(object sender, EventArgs e) 
    { 
     FirstNumber = Convert.ToDouble(DisplayTextBox.Text); 
     mathOperator = "+"; 

     DisplayTextBox.Text = ""; 
     DisplayTextBox.Focus(); 

    } 
    private void EqualButton_Click(object sender, EventArgs e) 
    { 
     Double SecondNumber; 
     SecondNumber = Convert.ToDouble(DisplayTextBox.Text); 

     switch (mathOperator) 
     { 
      case "+": 
       DisplayTextBox.Text = (FirstNumber + SecondNumber).ToString(); 
       break; 
      case "-": 
       DisplayTextBox.Text = (FirstNumber - SecondNumber).ToString(); 
       break; 
      case "*": 
       DisplayTextBox.Text = (FirstNumber * SecondNumber).ToString(); 
       break; 
      case "/": 
       DisplayTextBox.Text = (FirstNumber/SecondNumber).ToString(); 
       break; 
      default: 
       break; 
     } 
    } 

    private void button12_Click(object sender, EventArgs e) 
    { 
     FirstNumber = Convert.ToDouble(DisplayTextBox.Text); 
     FirstNumber *= -1; 
     DisplayTextBox.Text = FirstNumber.ToString(); 

    } 

    private void ButtonMinus_Click(object sender, EventArgs e) 
    { 

     FirstNumber = Convert.ToDouble(DisplayTextBox.Text); 
     mathOperator = "-"; 

     DisplayTextBox.Text = ""; 
     DisplayTextBox.Focus(); 

    } 

    private void ButtonMultiply_Click(object sender, EventArgs e) 
    { 

     FirstNumber = Convert.ToDouble(DisplayTextBox.Text); 
     mathOperator = "*"; 

     DisplayTextBox.Text = ""; 
     DisplayTextBox.Focus(); 

    } 

    private void ButtonDivide_Click(object sender, EventArgs e) 
    { 

     FirstNumber = Convert.ToDouble(DisplayTextBox.Text); 
     mathOperator = "/"; 

     DisplayTextBox.Text = ""; 
     DisplayTextBox.Focus(); 

    } 

    private void ButtonMod_Click(object sender, EventArgs e) 
    { 
     FirstNumber = Convert.ToDouble(DisplayTextBox.Text); 
     DisplayTextBox.Text = Math.Tan(FirstNumber).ToString(); 

    } 

    private void Button1_Click(object sender, EventArgs e) 
    { 
     DisplayTextBox.Text = DisplayTextBox.Text + "1"; 
    } 

    private void Button2_Click(object sender, EventArgs e) 
    { 
     DisplayTextBox.Text = DisplayTextBox.Text + "2"; 
    } 

    private void Button3_Click(object sender, EventArgs e) 
    { 
     DisplayTextBox.Text = DisplayTextBox.Text + "3"; 
    } 

    private void Button4_Click(object sender, EventArgs e) 
    { 
     DisplayTextBox.Text = DisplayTextBox.Text + "4"; 
    } 

    private void Button5_Click(object sender, EventArgs e) 
    { 
     DisplayTextBox.Text = DisplayTextBox.Text + "5"; 
    } 

    private void Button6_Click(object sender, EventArgs e) 
    { 
     DisplayTextBox.Text = DisplayTextBox.Text + "6"; 
    } 

    private void Button7_Click(object sender, EventArgs e) 
    { 
     DisplayTextBox.Text = DisplayTextBox.Text + "7"; 
    } 

    private void Button8_Click(object sender, EventArgs e) 
    { 
     DisplayTextBox.Text = DisplayTextBox.Text + "8"; 
    } 

    private void Button9_Click(object sender, EventArgs e) 
    { 
     DisplayTextBox.Text = DisplayTextBox.Text + "9"; 
    } 

    private void ButtonClear_Click(object sender, EventArgs e) 
    { 
     DisplayTextBox.Text = ""; 
     mathOperator = ""; 
    } 

    private void ButtonOff_Click(object sender, EventArgs e) 
    { 
     Application.Exit(); 
    } 

    private void ButtonTan_Click(object sender, EventArgs e) 
    { 
     FirstNumber = Convert.ToDouble(DisplayTextBox.Text); 
     DisplayTextBox.Text = Math.Tan(FirstNumber).ToString(); 
    } 

    private void ButtonSin_Click(object sender, EventArgs e) 
    { 
     FirstNumber = Convert.ToDouble(DisplayTextBox.Text); 
     DisplayTextBox.Text = Math.Sin(FirstNumber).ToString(); 

    } 

    private void ButtonCos_Click(object sender, EventArgs e) 
    { 
     FirstNumber = Convert.ToDouble(DisplayTextBox.Text); 
     DisplayTextBox.Text = Math.Cos(FirstNumber).ToString(); 

    } 

    private void Button0_Click(object sender, EventArgs e) 
    { 
     if (DisplayTextBox.Text.Length >= 1) 
     { 
      DisplayTextBox.Text = DisplayTextBox.Text + "0"; 
     } 
     else 
     { 
      return; 
     } 
    } 

    private void DecimalButton_Click(object sender, EventArgs e) 
    { 
     if (DisplayTextBox.Text.Contains(".")) 
     { 
      return; 
     } 
     else 
     { 
      DisplayTextBox.Text = DisplayTextBox.Text + "."; 
     } 
    } 
} 
+0

請,只提供了小片的一種再現你的問題的代碼。我想知道是否有人會讀這個代碼轉儲到最後 –

+0

爲什麼不實現一個C或CC按鈕(或兩者)? – bhs

+0

@bhs OP的問題是當他鍵入'1 + 2'時,他顯示'12'而不是'2',因爲'1'沒有被刪除,它應該是。 – Dialecticus

回答

0

將狀態變量添加到您的類中。如果爲真,並且選擇了一個數字,請在寫入數字之前清除顯示並將其設置爲假。

單擊「=」時,將其設置爲true。

0

基於簡要回顧,似乎您需要引入一個變量來跟蹤計算器的狀態,然後當按下「相等」按鈕時,將狀態設置爲計算值。然後,在數字按鈕(0-9)中,您需要檢查狀態變量並追加或替換顯示文本。

0

創建這個全局變量...

private bool equationComplete = false; 

這添加到末尾的等號按鈕...

equationComplete = true; 

一下添加到每個數字按鍵點擊開始......

if (equationComplete) DisplayTextBox.Text = ""; 

一下添加到每個數字按鈕單擊事件處理程序結束...

equationComplete = false; 
2

添加一個布爾變量的類,它表示的操作是否已剛剛完成與否,這樣的標誌:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    Double FirstNumber; 
    string mathOperator = ""; 
    bool operationJustCompleted = false; 

最初,該值將是false,因爲什麼事都沒有計算器首次創建時發生。現在

,在等於按鈕事件處理程序的結束,標誌設置爲true,像這樣:

private void EqualButton_Click(object sender, EventArgs e) 
{ 
    // Logic for calculation 

    operationJustCompleted = true; 
} 

最後,在數字鍵的事件處理程序,檢查,看看是否operationJustCompleted標誌是真的,如果是的話清除文本並重置剛剛完成標誌的操作回到false;像這樣:

private void Button1_Click(object sender, EventArgs e) 
{ 
    if(operationJustCompleted) 
    { 
     DisplayTextBox.Text = String.Empty; 
     operationJustCompleted = false; 
    } 
    DisplayTextBox.Text = DisplayTextBox.Text + "1"; 
} 
0

就像大衛·阿諾說,這樣的事情:

private void EqualButton_Click(object sender, EventArgs e) 
    { 
     ClearDisplayBeforeNextTextEntry = true; 
    } 

    private void Button1_Click(object sender, EventArgs e) 
    { 
     // New code 
     ClearText(); 
     // Old code 
     DisplayTextBox.Text = DisplayTextBox.Text + "1"; 
    } 

    // Same for all other number buttons as above 

    private void ClearText() 
    { 
     if (ClearDisplayBeforeNextTextEntry) 
     { 
      DisplayTextBox.Text = ""; 
      ClearDisplayBeforeNextTextEntry = false; 
     } 
    } 
相關問題