2015-06-10 28 views
-2

我以asp.net開頭,但我不太確定我做錯了什麼。其實我的第一步是製作一個計算器,但在尋找答案2小時後,我決定向你詢問這個問題。onClick action後無效

我有10個按鈕[0,1,2 ... 9],4個動作按鈕[+, - ,*,/]和一個按鈕來計算[=]:

int firstNumber, secondNumber; 
     Button lastClicked; 
     bool isFirstNumberSet; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      firstNumber = 0; 
      isFirstNumberSet = false; 
      lastClicked = new Button(); 

     } 

     public void addToTextbox(object sender, EventArgs e) 
     { 
      Button number = (Button)sender; 
      TextBox1.Text += number.Text; 
     } 

     public void doSomething(object sender, EventArgs e) 
     { 
      if (isFirstNumberSet.Equals(false)) firstNumber = int.Parse(TextBox1.Text); 
      else secondNumber = int.Parse(TextBox1.Text); 
      lastClicked = new Button(); 
      lastClicked = (Button)sender; 
      isFirstNumberSet = true; 
      TextBox1.Text = ""; 
     } 

     public void calculate(object sender, EventArgs e) 
     { 

      switch (lastClicked.ID) 
      { 
       case "ButtonPlus": 
        TextBox1.Text = (firstNumber + secondNumber).ToString(); 
        isFirstNumberSet = false; 
        break; 

       case "ButtonMinus": 
        TextBox1.Text = (firstNumber - secondNumber).ToString(); 
        isFirstNumberSet = false; 
        break; 

       case "ButtonDziel": 
        TextBox1.Text = (firstNumber/secondNumber).ToString(); 
        isFirstNumberSet = false; 
        break; 

       case "ButtonMnoz": 
        TextBox1.Text = (firstNumber * secondNumber).ToString(); 
        isFirstNumberSet = false; 
        break; 
} 

但當我做例如2 + 2的動作,然後我打「=」。我得到有關代碼的異常:

開關(lastClicked.ID)

它說lastClicked爲空,但如何?點擊「+」後,應該將發送者對象保存到這個變量中。我錯了嗎?

+0

你可以一步一步與debuger一起檢查doSomething函數是否被實際調用,並且lastClicked是按照預期設置的。 –

+1

每次頁面重新加載時,Page_Load()事件都會聲明一個新的lastClicked變量。由於新按鈕沒有添加到傳出文檔中,因此它永遠不會收到ID,因此在調用calculate()方法時它爲空。 –

+0

我檢查過,doSomething發件人被正確地傳遞給lastClicked後,但當我做另一個動作像打任何數字按鈕,然後lastClicked再次來到空:( –

回答

1

您的按鈕變量賦值不會在您期待的回傳之間持續存在。當calculate觸發您的「=」keyhit時,lastClicked現在未在此新的「往返行程」上分配,因此爲空。當你按下一個按鈕一次,然後第二個按鈕下一次,沒有記憶的先前的命中,除非你存儲在發送回服務器的數據中捕獲的字段中的值。

您可以探索的一種方法是將已被選中的操作存儲到窗體上的隱藏HTML字段中,然後在點擊計算例程時進行詢問。這消除了需要嘗試持續保留「lastClicked」按鈕。

在某處,ASPX,你的表格中,你可以添加:

<asp:HiddenField id="Operation" runat="server" /> 

然後,在你的代碼隱藏在響應您的操作按鈕之一:

Operation.Value = "Plus"; // or "+" or whatever is appropriate 

那簡直就被送進在下一次旅程中返回客戶端,然後當您的calculate方法被調用以響應「=」按鈕點擊時,將數據的一部分發送回服務器:

public void calculate(object sender, EventArgs e){ 

     switch(Operation.Value){ 
      case "Plus"; 
       // do the "PLUS" thing 
       // and so on 

     ... (snip)... 
} 
+1

它的工作原理,非常感謝;-) –