单击 ListBox1 中的一个项目,ListBox2 中的项目也同时在 vb 中被选中

Click an item in ListBox1 and ListBox2 item is also selected simultaneously in vb

基本上,当我有 2 个列表框时,当你 select 列表框中的一个项目时,它会突出显示。

我想要做的是 select 来自任何列表框的项目,它突出显示相应的数据。

这是我试过的方法,但显然这只是一个使程序崩溃的循环。

Private Sub lstOrders_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstOrders.SelectedIndexChanged
    lstTotalsEachOrder.SetSelected(lstOrders.SelectedIndex, True)
End Sub
Private Sub lstTotalsEachOrder_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstTotalsEachOrder.SelectedIndexChanged
    lstOrders.SetSelected(lstTotalsEachOrder.SelectedIndex, True)
End Sub

任何帮助将不胜感激:)

使用布尔标志。

Dim Selecting As Boolean = False
Private Sub lstOrders_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstOrders.SelectedIndexChanged
    If Not Selecting Then
       Selecting = True
       lstTotalsEachOrder.SetSelected(lstOrders.SelectedIndex, True)
       Selecting = False
    End If
End Sub
Private Sub lstTotalsEachOrder_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstTotalsEachOrder.SelectedIndexChanged
    If Not Selecting Then
       Selecting = True
       lstOrders.SetSelected(lstTotalsEachOrder.SelectedIndex, True)
       Selecting = False
    End If
End Sub

只需保留一个标记,即可知道您何时 "handling yourself" 选择

Private isManuallyHandled As Boolean = False

Private Sub ListBoxes_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstOrders.SelectedIndexChanged, lstTotalsEachOrder.SelectedIndexChanged
    If isManuallyHandled Then Return

    Dim source = DirectCast(sender, ListBox)
    Dim target = If(source Is lstOrders, lstTotalsEachOrder, lstOrders)
    isManuallyHandled = True
    target.SelectedIndex = source.SelectedIndex ' simpler than SetSelected
    isManuallyHandled = False
End Sub