2013-07-15 97 views
-3

我正在開發一個庫存系統,其中我通過textbox1從數據庫獲取數據,並且與textbox1中的條目兼容的數據出現在textbox8和textbox10中,它們是整數。現在我想乘以textbox8和textbox10,當整數出現在textbox8和textbox10中時,結果應顯示在textbox7中。兩個文本框的值的乘法和在第三個文本框中顯示結果

我使用這段代碼的兩個文本框的增殖,並導致第三個文本框不出現:

private void textBox7_TextChanged(object sender, EventArgs e) 
     { 

      Int32 val1 = Convert.ToInt32(textBox10.Text); 
      Int32 val2 = Convert.ToInt32(textBox8.Text); 
      Int32 val3 = val1 * val2; 
      textBox7.Text = val3.ToString(); 

     } 
+0

當你調試這個,有什麼val1'的'值, 'val2'和'val3'?此外,爲了幫助您處理代碼,您可能希望使用比textBox7,textBox8和textBox10,val1,val2等更有意義的名稱。 – David

+2

這是什麼目的?您正在更改事件TextBox7_TextChanged內的TextBox7的值。 – Steve

+0

val1和val2可以是數據庫中的任何值。 我想在文本框7中顯示val3的結果。文本 好吧,先生,我會照顧下一次,並提供有意義的名字。 –

回答

2

您將事件分配給了錯誤的控件,而且您沒有檢查有效的輸入。您可以使用int.TryParse查找有效的數字輸入。

 private void textBox8_TextChanged(object sender, EventArgs e) 
     { 
      Multiply(); 
     } 

     private void textBox10_TextChanged(object sender, EventArgs e) 
     { 
      Multiply(); 
     } 

     public void Multiply() 
     { 
      int a, b; 

      bool isAValid = int.TryParse(textBox8.Text, out a); 
      bool isBValid = int.TryParse(textBox10.Text, out b); 

      if (isAValid && isBValid) 
       textBox7.Text = (a * b).ToString(); 

      else 
       textBox7.Text = "Invalid input"; 
     } 
+0

非常感謝...它的工作 –

4

您正在使用您的TextChanged事件錯誤的文本。您的文本框8和10正在更改,但您已將所顯示的代碼附加到textbox7。

public MyForm : Form { 
    public MyForm(){ 
     InitializeComponents(); 
     // Here you define what TextBoxes should react on user input 
     textBox8.TextChanged += TextChanged; 
     textBox10.TextChanged += TextChanged; 
    } 

    private void TextChanged(object sender, EventArgs e) 
    { 

     int val1; 
     int val2; 

     if (!int.TryParse(textBox8.Text, out val1) || !int.TryParse(textBox10.Text, out val2)) 
      return; 

     Int32 val3 = val1 * val2; 
     // Here you define what TextBox should show the multiplication result 
     textBox7.Text = val3.ToString(); 

    } 
} 

最後取出裏面textBox7_TextChanged(object sender, EventArgs e)

+0

那麼我應該使用哪個文本框? –

+0

您應該在textbox8和textbox10上附加TextChanged事件,因爲這兩者預計會發生更改。 – dwonisch

+0

您可以在我的代碼中進行一些更改或鍵入示例嗎? 我沒有得到它,因爲我想在textbox7中打印結果 –

2

代碼,能得到任何編譯或錯誤的問題?您需要爲控件提供有意義的名稱,以更好地區分這些控件。仔細檢查您是否正確引用了您的控件。無論如何,你的代碼應該工作。我下面的代碼捕捉到一個失敗轉換爲int32下面。

try 
    { 
     textBox7.Text = (Convert.ToInt32(textBox10.Text) * Convert.ToInt32(textBox8.Text)).ToString(); 
    } 
    catch (System.FormatException) 
    { } 
+0

我用它,但我沒有得到任何錯誤,既沒有結果.. –

+0

也許你得到的錯誤,因爲textbox10,因爲在文本中的「t」應該是大寫。 –

+1

大寫't'。你應該使用上面的答案。我沒有注意到你正在使用錯誤的事件。謝謝! – Craig

0

更改您的代碼如下:

私人無效textBox7_TextChanged(對象發件人,EventArgs的){

 Int32 val1 = Convert.ToInt32(textBox10.Text); 
     Int32 val2 = Convert.ToInt32(textBox8.Text); 
     Int32 val3 = val1 * val2; 
     textBox7.Text = Convert.ToString(val3); 

    } 
相關問題