Vb.net 对于组合框,selectedIndex返回0,而selectedtext返回值

Vb.net 对于组合框,selectedIndex返回0,而selectedtext返回值,vb.net,winforms,Vb.net,Winforms,从组合框中选择值并保存表单后,Combobox.SelectedText包含所选值,但Combobox.SelectedIndex始终为列表中的每个项目返回0。下面是供参考的示例代码 If (combobox1.SelectedIndex = 0 Or combobox1.SelectedText = "") MessageBox.Show("No value selected") else MessageBox.Show("Some value

从组合框中选择值并保存表单后,Combobox.SelectedText包含所选值,但Combobox.SelectedIndex始终为列表中的每个项目返回0。下面是供参考的示例代码

If (combobox1.SelectedIndex = 0 Or combobox1.SelectedText = "")
MessageBox.Show("No value selected")
else
MessageBox.Show("Some value selected")
End If

一些代码来说明用法

Private Sub ComboBox1_SelectedIndexChanged(sender As Object,
                                           e As EventArgs) Handles ComboBox1.SelectedIndexChanged

    'check for no item selected
    If ComboBox1.SelectedIndex < 0 Then
        Stop 'no item
    Else
        Dim idx As Integer = ComboBox1.SelectedIndex
        Dim val As String = CStr(ComboBox1.SelectedItem) '<-- use SelectedItem
        Stop
    End If
End Sub
小回答

SelectedText与SelectedItem不同。看看:

获取或设置在组合框的可编辑部分中选择的文本

我想你把这和

SelectedIndex:-1如果未选择任何内容,则为所选项目的索引 SelectedValue:如果未选择任何内容,则为空,否则为所选项目 SelectedText:操作员在组合框的可编辑部分中标记的文本。 **有待改进的地方**

你使用VB。我的VB有点生疏,所以我会用C给出答案。我想你会明白要点的

在Winforms中,每当您要填充显示一系列项的列表时,如组合框、列表框、DataGridView、图表等,通常有两种方法:

用要显示的文本逐个填充组合框 使用数据源:用您希望可选择的项填充它,并告诉组合框您希望显示可选择项的哪个属性。 如果只想显示字符串的常量数组,请使用第一种方法。填写ComboBox.Items。选择项目后,使用SelectedIndex获取所选字符串的索引。使用ComboBox.Items[selectedIndex]获取所选字符串

如果字符串不仅仅代表字符串,例如,文本代表客户或产品。使用DataSource方法通常更容易

要做到这一点,您可以使用属性ComboBox.DataSource告诉ComboBox它应该显示哪个Customer。在ComboBox.ValueMember中,您告诉ComboBox应该使用哪个Customer poperty来表示客户,例如客户的名称

操作员选择客户名称后,您可以使用属性ComboBox获得完整的选定客户。SelectedItem:

当然,您应该只选择唯一的属性。如果您有两个名为Hans Brinker的客户,运营商将不知道哪个名称代表哪个客户

除了不必从SelectedIndex查找此选定项目代表的客户之外,您还可以独立于客户的显示顺序


另一件好事:如果在未来的版本中,您希望从ComboBox更改为ListBox,或者甚至更改为DataGridView,那么您不必大幅更改您的模型:控件仍然显示一系列客户,并且一旦操作员选择了代表此客户名称的内容?Id?,DataGridView行?,您将获得完整的客户。

1Combox1.SelectedIndex从-1开始,当您未被选中时,Combox1.SelectedIndex=-1

2单击combobox1.items时,SelectedText始终为

这是因为,在这些事件发生时,SelectedIndexChanged、SelectedValueChanged,先前选择的文本值已清除,新值尚未设置。您可以改为使用SelectedItem属性。 例如:combobox1.SelectedItem

请尝试以下代码

If ComboBox1.SelectedIndex = -1 Then
  MessageBox.Show("No value selected")
Else
  MessageBox.Show("Some value selected")
End If

if…else语句的两个块中都有相同的消息,未选择任何值。当未选择任何内容时,将返回-1,而不是0。请注意,您几乎不应该将SelectedText用于组合框。该属性的工作原理与文本框相同。通常使用的属性有SelectedItem、SelectedIndex、SelectedValue和Text。你应该阅读每一个的文档来了解它们是如何工作的。这个问题怎么样,有什么需要更新的吗?如果问题解决了,请标出有用的答案。这将促进论坛的发展。
Customer selectedCustomer = (Customer)cmbo1.SelectedValue;
ProcessSelectedCustomer(selectedCustomer);
If ComboBox1.SelectedIndex = -1 Then
  MessageBox.Show("No value selected")
Else
  MessageBox.Show("Some value selected")
End If