将多个文本框相乘

时间:2014-10-02 11:55:37

标签: vb.net

我正在创建一个菜单应用程序,我目前有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到总值。

由于

1 个答案:

答案 0 :(得分:2)

首先,我强烈建议使用.NET方法而不是旧的VB方法。我也会将OPTION STRICT设置为On,这样可以避免"魔法"运行时为您完成的转换。相反,你必须指定正确的类型,这是一件好事,因为它可以防止运行时出错,也有助于学习.NET类型和方法。

我会将这些TextBox全部添加到同一个容器控件中(如Panel或类似的东西)。我还建议为控件使用更有意义的名称(f.e。TxtTotal作为总文本框)。

所以如果所有价格文本框都是'名称以TxtPrice开头(f.e。TxtPrice1等),所有quantity-TextBox都以TxtQuantity开头(f.e。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()