您已经有了答案,但我认为代码可以稍作改进。根据经验,如果我要针对列表中多个项目的单个变量进行检查,我会使用Select Case
而不是正在进行的ElseIf
语句列表。第一个原因是,如果您在第一个上更改某些内容,则必须记住在所有其他内容上进行更改。CodeGray 已经通过将值声明为局部变量解决了这个问题,但是可读性仍然会提高,所以试试这个:
Select Case C_job.SelectedItem.ToString
Case "Internet"
t_amount.Text = "20"
Case "Games"
t_amount.Text = "10"
Case "Print (short)"
t_amount.Text = "1"
Case "Print (long)"
t_amount.Text = "2"
End Select
另外,我只是想检查您是否正确使用了 ComboBox 的Display Member
和Value Member
。您可以在组合框中公开两个具有本机支持的属性,一个是要显示给用户的值,另一个是支持属性。当您执行代码时,您将可以访问两者。好处是您可以以更具声明性的方式存储这些信息,然后做出相应的反应。
当 ComboBox 有一个选择时,该信息将存储在SelectedItem
存储用于填充该下拉项的原始对象的属性中。如果您为组合框项目定义了DisplayMember
and ValueMember
,则SelectedText
andSelectedValue
将只公开所选对象的那些属性。
这是设置
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dataSource As New DataTable
With dataSource.Columns
.Add("Display", GetType(String))
.Add("Value", GetType(Integer))
End With
With dataSource.Rows
.Add("Internet", 20)
.Add("Games", 10)
.Add("Print (short)", 1)
.Add("Print (long)", 2)
End With
With C_job
.DisplayMember = "Display"
.ValueMember = "Value"
.DataSource = dataSource
End With
End Sub
好的一面,现在是处理事件所需的所有代码
Private Sub C_job_SelectedIndexChanged(sender As Object, e As EventArgs) Handles C_job.SelectedIndexChanged
t_amount.Text = C_job.SelectedValue
End Sub
如果您愿意,这也将使绑定此属性变得非常容易,因为您已经预先编写了所有逻辑。