首先,我強烈建議使用.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()
改爲使用「列表」,並存儲您的文本框值。然後在'foreach'中使用該列表進行計算。 –
Rahul
2014-10-02 12:01:27
要開始以一種易於理解的方式命名您的文本框:I.E.產品2etc的txtTotal1,txtQuantity1,txtPrice1等... – Steve 2014-10-02 12:01:30