首页 > 解决方案 > 如何将用户的文本乘以从菜单中选择的数组项?

问题描述

我正在尝试编写一个总工资计算器,并且无法完全获得将用户输入的数字乘以所选工资率的编码权。

我尝试的一切都是基于调整其他项目的代码以适应我当前的项目,但只会返回错误。

Private strCode(,) As String = {{“P23”, “10.5”},
                                    {“P56”, “12.5”},
                                    {“F45”, “14.25”},
                                    {“F68”, “15.75”},
                                    {“F96”, “17.65”}}
Private Sub txtHours_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtHours.KeyPress
        ' Accept only numbers, the period, and the Backspace key.

        If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso e.KeyChar <> "." AndAlso e.KeyChar <> ControlChars.Back Then
            e.Handled = True
        End If
    End Sub

    Private Sub BtnCal_click(sender As Object, e As EventArgs) Handles btnCalc.Click
        Const V As strCodes(,)(,)
        Dim txtHours As Decimal = txtHours.text
        lblGross.Text = {{txtHours.Text} * {lstCodes.SelectedIndex}}
   End Sub

无论我将 txtHours 声明为双精度数还是十进制数,它总是返回无法转换的错误。代码的底部部分不起作用,但本质上是我需要使用此代码进行的操作。

标签: vb.net

解决方案


我创建了一个结构来保存您的数据。然后结构类型的列表可以保存数据,并且可以将 List(Of T) 绑定到列表框。display 和 value 成员设置为结构的属性。当在列表框中选择一个项目时,我们可以获得 .SelectedValue 并在计算中使用它。

Public Structure PayRate
    Public Property RateClass As String
    Public Property PayRate As Decimal
    Public Sub New(rClass As String, pRate As Decimal)
        RateClass = rClass
        PayRate = pRate
    End Sub
End Structure

Private PayRates As New List(Of PayRate)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    PayRates.Add(New PayRate(“P56”, 12.5D))
    PayRates.Add(New PayRate(“F45”, 14.25D))
    PayRates.Add(New PayRate(“F68”, 15.75D))
    PayRates.Add(New PayRate(“F96”, 17.65D))
    ListBox1.DataSource = PayRates
    ListBox1.DisplayMember = "RateClass"
    ListBox1.ValueMember = "PayRate"
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim Hours As Decimal
    If Decimal.TryParse(TextBox1.Text, Hours) Then
        Label1.Text = (Hours * CDec(ListBox1.SelectedValue)).ToString("000.00")
    Else
        MessageBox.Show("Please enter a valid number in Hours box.")
    End If
End Sub

推荐阅读