2 Listboxen deaktivieren sich gegenseitig

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von o815michi.

    2 Listboxen deaktivieren sich gegenseitig

    Hallo,

    wie mache ich es am besten?

    Ich habe zwei Listboxen da stehen ähnliche Sachen drin. Wenn ich in Listbox 1 einen Eintrag aktiviere soll der Eintrag (falls einer markiert ist) ist Listbox 2 (egal welcher markiert ist) deaktiviert werden. 2 markierte Eintrage (in 2 Listboxen) würden den Benutzer verwirren, zu wem die angezeigten Daten nun gehören. Das gleiche auch umgekehrt.
    Ich habe schon einige Varianten ausprobiert, aber immer gibt es Nebenwirkungen. Momentan deaktivieren sich beide Einträge wenn ich einen in der2. Listbox aktiviere.
    Bei der anderen Variante habe ich das Problem das ewin Speicherüberlauf kommt...

    VB.NET-Quellcode

    1. Private Sub LB_2er_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_2er.SelectedIndexChanged
    2. Dim Liste As Integer = 2, Index As Integer = LB_2er.SelectedIndex
    3. If Index <> -1 Then Call Effekte_markieren(Liste, Index)
    4. LB_3er.ClearSelected()
    5. End Sub
    6. Private Sub LB_3er_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_3er.SelectedIndexChanged
    7. Dim Liste As Integer = 3, Index As Integer = LB_3er.SelectedIndex
    8. If Index <> -1 Then Call Effekte_markieren(Liste, Index)
    9. LB_2er.ClearSelected()
    10. End Sub
    11. Private Sub Effekte_markieren(ByVal Liste As Integer, ByVal Index As Integer)
    12. ' ...
    13. ' LB_3er.ClearSelected()
    14. ' LB_2er.ClearSelected()
    15. If Index = -1 Then Exit Sub
    16. Select Case Liste
    17. Case 2
    18. ' If LB_2er.SelectedIndex > -1 And LB_3er.SelectedIndex > -1 Then
    19. ' LB_3er.ClearSelected()
    20. 'LB_2er.SetSelected(Index, True)
    21. ' ...
    22. Case 3
    23. ' LB_2er.ClearSelected()
    24. 'LB_3er.SetSelected(Index, True)
    25. ' If LB_2er.SelectedIndex > -1 And LB_3er.SelectedIndex > -1 Then
    26. ' ...
    27. End Select
    28. ....
    29. End Sub



    Edit: um es verständlicher zu machen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „o815michi“ ()

    VB.NET-Quellcode

    1. Private Sub checken()
    2. Dim i As Integer
    3. For i = 0 To ListBox2.Items.Count - 1
    4. Try
    5. If ListBox1.SelectedItem = ListBox2.SelectedItems(i) Then
    6. ListBox2.SelectedIndex = ListBox.NoMatches
    7. End If
    8. Catch ex As Exception
    9. End Try
    10. Next
    11. End Sub


    Das Catch ex As Exception noch geben ne Sselectionsabfrage tauschen

    ZBb: (( If ListBox1.SelectedIndex = False Then ))

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TVX“ ()

    Doch das geht ,hab aber en anderen Denkfehler drin

    Die selektion auf na bestimmten Stelle aufheben sollte so gehen

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ListBox2.SetSelected(i, False)


    Aber das wars noch nicht ganz :whistling:

    EDIT

    SO HABS JETZ RICHTIG :!:

    VB.NET-Quellcode

    1. Private Sub checken()
    2. Dim i As Integer
    3. For i = 0 To ListBox1.Items.Count - 1
    4. If ListBox1.SelectedItem = ListBox2.Items.Item(i) Then
    5. If ListBox1.SelectedItem = ListBox2.SelectedItems(i) Then
    6. ListBox2.SetSelected(i, False)
    7. End If
    8. End If
    9. Next
    10. End Sub
    11. End Class


    Aufruf:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. checken()
    3. End Sub

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TVX“ ()

    Hallo,

    wie bitte ?

    VB.NET-Quellcode

    1. ...
    2. If ListBox1.SelectedItem = ListBox2.SelectedItems(i) Then...


    Listbox1 <> Listbox2

    Listbox1 und Listbox2 haben zwar ähnliche Daten (sogar Daten aus der gleichen Datenbank) aber durch die Listboxen sollen die Unterschiede dargestellt werden.
    Es ist Programmtechnisch ausgeschlossen, das die gleichen Daten in Listbox1 und 2 landen.
    Achja, ich kann in beiden Listboxen nur 1 Item Markieren.

    Grüße

    Edit:
    Das geht sogar soweit ! das nicht die gleichen ITEM in diesen Listboxen landen. Ich kann hier auch den Füll-Prozess posten, aber das führt wahrscheinlich zu weit.
    Wenn Listbox LB_3er das gleiche Item besitzen würde wie Listbox LB_2er wäre das ein Widerspruch. (für den Programmanwender)
    Wenn das Item Hängemoos in LB_3er landet könnte es zwar auch in LB_2er (von der Logik) aber das würde zu unlogischen Doppelungen führen.

    Auf gut Deutsch: Das gleiche Item gibt es nicht zeitgleich in beiden Listboxen !

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „o815michi“ ()

    SO IST FEHLERFREI

    VB.NET-Quellcode

    1. Private Sub checken()
    2. For i = 0 To ListBox2.Items.Count - 1
    3. If ListBox1.SelectedItem = ListBox2.Items.Item(i) Then
    4. ListBox2.SetSelected(i, False)
    5. End If
    6. Next
    7. End Sub



    So wird das Selectet Item mit Listbox 2 zeilenweise verglichen ,wenn ein Eintrag doppelt ist wird fals er selektiert ist seine selection aufgehoben .
    Hierbei wird die Zeile wo er in Listbox2 befindet über i abgefangen

    Das ganze dann noch ins Mausevent dann sollte es gehen .

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TVX“ ()

    Hallo,

    ich habe mal etwas rumbrobiert und die Google gefragt.

    Hier meine Lösung.

    VB.NET-Quellcode

    1. Dim CS as Boolean
    2. Private Sub LB_2er_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_2er.SelectedIndexChanged
    3. If Not cs And LB_2er.SelectedIndex <> -1 Then
    4. cs = True
    5. LB_3er.ClearSelected()
    6. Call ...
    7. cs = False
    8. End If
    9. End Sub
    10. Private Sub LB_3er_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_3er.SelectedIndexChanged
    11. If Not cs And LB_3er.SelectedIndex <> -1 Then
    12. cs = True
    13. LB_2er.ClearSelected()
    14. Call ...
    15. cs = False
    16. End If
    17. End Sub


    ..und sie funktioniert

    Grüße