视觉基础 ComboBox.SelectedIndex

Visual basic ComboBox.SelectedIndex

我开发了一个 vb.net 应用程序,但我在使用组合框时遇到了问题。

我知道组合框上的选定项目何时更改:

Private Sub ComboBoxSite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxSite.SelectedIndexChanged
    If (ComboBoxSite.SelectedIndex <> 0) Then 'If it is not the default value
        Console.WriteLine("ActionListenerIndex = {0}", ComboBoxSite.SelectedIndex) 'To debug
        RequestAccesv2(0)
    End If
End Sub

以及 RequestAccessv2() 函数

Private Sub RequestAccesv2(taille As Integer)
    initBoxesLocation() 'A function that clear/refill 4 comboBoxes
    Console.WriteLine("SELECTED INDEX SITE : {0}", ComboBoxSite.SelectedIndex)
        Select Case taille
            Case 0 ..... 'Some database treatment

End Sub

并且在输出中有结果,当调用第二个函数时,我没有相同的 selectedIndex :

ActionListenerIndex = 2
SELECTED INDEX SITE : -1 'Does it means thas nothing is selected ?

你有没有had/solved这个问题?

此致, 法比恩

数据索引是非负的。 Index -1 表示没有选择。如果查找何时选择了有效索引,请检查 0 或更大。

Private Sub ComboBoxSite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxSite.SelectedIndexChanged
    If (ComboBoxSite.SelectedIndex >= 0) Then 'If it is not the default value
        Console.WriteLine("ActionListenerIndex = {0}", ComboBoxSite.SelectedIndex) 'To debug
        RequestAccesv2(0)
    End If
End Sub

参见 MSDN:https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectedindex(v=vs.110).aspx

ComboBox.SelectedIndex 属性

属性 值
类型:System.Int32 当前所选项目的从零开始的索引。
如果未选择任何项目,则返回负一 (-1) 的值。

现在,您可能想忽略第一个值,然后使用 ComboBoxSite.SelectedIndex >= 1。但是,如果用户选择了第二个,然后是第一个,你还想忽略它吗?

当没有选择项目时,将返回-1。这是通常检查的内容:

Private Sub ComboBoxSite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxSite.SelectedIndexChanged
    If (ComboBoxSite.SelectedIndex <> -1) Then ' If something is selected
        Console.WriteLine("ActionListenerIndex = {0}", ComboBoxSite.SelectedIndex) 'To debug
        RequestAccesv2(0)
    End If
End Sub

如果您在第一个插槽中有不应选择的值,那么您可以检查以确保它 >= 1:

Private Sub ComboBoxSite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxSite.SelectedIndexChanged
    If (ComboBoxSite.SelectedIndex >= 1) Then ' If it is not the default value at index 0 (zero), and something is selected
        Console.WriteLine("ActionListenerIndex = {0}", ComboBoxSite.SelectedIndex) 'To debug
        RequestAccesv2(0)
    End If
End Sub

感谢您的回答!

确实是史蒂夫和朋友,问题出在函数 initBoxesLocation 上。 在这个功能中,我清除了 4 个组合框,然后我在每个组合框上添加了 1 个项目。

没看懂问题出在哪里

编辑:是的,当然,一旦我的组合框重新归档,我就没有再次选择一个项目,所以有问题。

Private Sub initBoxesLocation()
    Console.WriteLine("initialisation entete")
    initBoxEnteteSite()
    initBoxEnteteBuilding()
    initBoxEnteteModule()
    initBoxEnteteRoom()
End Sub

我拆分了 initBoxesLocation() 函数,根据更改的组合框调用一个或另一个重置函数,实际上我不需要调用它们。

现在可以了!

问候法比恩