2014-10-02 51 views
1

我正在創建一個菜單應用程序,目前我有3個文本框,textbox1是價格,textbox2是數量,textbox3是總數。我已經成功編寫了代碼,根據他們需要的數量計算物品的價格。代碼中,我現在所擁有的:乘以多個文本框

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 
    TextBox8.Text = CStr(Val(TextBox6.Text) * Val(TextBox7.Text)) 
End Sub 

現在我需要的是,我將有更多的項目說,10文本框旁邊的數量,這使得20個文本框和一個文本框總一起。我該如何編寫代碼,以便計算每個文本框以及空值,例如,如果在10個項目中,我只想將每個數量2個項目1個添加到總值中。

謝謝

+0

改爲使用「列表」,並存儲您的文本框值。然後在'foreach'中使用該列表進行計算。 – Rahul 2014-10-02 12:01:27

+0

要開始以一種易於理解的方式命名您的文本框:I.E.產品2etc的txtTotal1,txtQuantity1,txtPrice1等... – Steve 2014-10-02 12:01:30

回答

2

首先,我強烈建議使用.NET方法,而不是舊的VB方法。我通常會將OPTION STRICT設置爲On,這樣可以避免運行時爲您完成的「神奇」轉換。相反,您必須指定正確的類型,這是一件好事,因爲它可以防止運行時錯誤,並且還有助於學習.NET類型和方法。

我會將這些文本框全部添加到相同的容器控件(如Panel或類似的東西)。我還建議爲您的控件使用更有意義的名稱(f.e。TxtTotal用於全文本框)。

所以,如果所有的價格文本框的名字與TxtPrice(FE TxtPrice1等)和所有數量,文本框啓動開始TxtQuantity(FE TxtQuantity1等),這LINQ查詢方法將工作:

Dim allTextBoxes = PriceQuantityPanel.Controls.OfType(Of TextBox)() 
Dim allPrices = From txt In allTextBoxes 
       Where txt.Name.StartsWith("TxtPrice") 
Dim allQuantities = From txt In allTextBoxes 
        Where txt.Name.StartsWith("TxtQuantity") 
Dim price As Decimal 
Dim invalidPrices = From txt In allPrices 
        Where Not Decimal.TryParse(txt.Text, price) 
If invalidPrices.Any() Then 
    MessageBox.Show("Please enter valid prices(Decimal)!") 
    Return 
End If 
Dim quantity As Int32 
Dim invalidQuantities = From txt In allQuantities 
         Where Not Int32.TryParse(txt.Text, quantity) 
If invalidQuantities.Any() Then 
    MessageBox.Show("Please enter valid quantities(Integer)!") 
    Return 
End If 

現在你可以通過數字後綴「加入」價格和數量文本框對:

Dim query = From txtP In allPrices 
      Join txtQ In allQuantities 
      On txtP.Name.Substring("TxtPrice".Length) Equals txtQ.Name.Substring("TxtQuantity".Length) 
      Select New With {.Price = Decimal.Parse(txtP.Text), .Quantity = Int32.Parse(txtQ.Text)} 

Dim totalSum As Decimal = query.Sum(Function(x) x.Price * x.Quantity) 
TxtTotal.Text = totalSum.ToString() 
+0

如果txtprice文本框中的默認值已經完成了這項工作? – user3562155 2014-10-02 16:24:50

+0

是的,爲什麼不呢? – 2014-10-02 16:58:46

+0

它現在在工作,非常感謝! – user3562155 2014-10-03 10:47:12