2014-10-02 52 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