ListBox.SelectAll

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    ListBox.SelectAll

    Hi,
    ich bin gerade auf der Suche nach einer Möglichkeit, alle Elemente einer Listbox auf einen Schlag zu selektieren
    und bin dabei über folgende Beschreibung von MS gestolpert:
    msdn.microsoft.com/en-us/libra….selectall(v=vs.110).aspx
    Der Witz ist nur, dass mir das .SelectAll gar nicht zur Verfügung steht, egal welches Framework.

    Meine Frage in diesem Zusammenhang: ich durchlaufe aktuell alle Elemente der Listbox und setze sie einzeln auf Selected,
    SelectionMode.MultiSimple natürlich vorausgesetzt, um mehr als ein Element selektieren zu können.
    Das führt natürlich jedesmal zu einem Ereignis SelectedIndexChanged mit Ausführung aller dranhängenden Aktionen.
    Aktuell habe ich eine boolsche Variable drangeflickt um wenigstens die Aktionen zu unterbinden, so lange die Bereichsselektierung durchgeführt wird.
    Schöner wäre es, die Ereignisse der Listbox so lange abzustellen. Wie bekomme ich sowas hin?
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!
    mit RemoveHandler. Alles über Events

    Es gibt übrigens noch die Alternative, temporäre WithEvents-Variablen zu verwenden, die man auf Nothing setzt, solange man sensiblen Code ausführt. Dadurch sind alle Events auf einen Schlag deaktiviert.

    PS: Der MS-Artikel ist der Hit! Zumindest für FW4.5 einfach falsch - 4.6 weiß ich nicht. Böse Falle!

    Ach, ich kann dir VisualStudio richtig nutzen (Google ist nicht deine Mami) empfehlen - man muss nicht immer googeln ;)

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

    Das verlinkte Beispiel ist für WPF (siehe ByVal e As RoutedEventArgs).
    Bei WinForm gibt es diese Methode nicht.
    Bei WinForm muß man alle Index durchlaufen und die Methode SetSelected anwenden.

    Beispiel als Extension:

    VB.NET-Quellcode

    1. Public Module ListBoxExtensions
    2. <Runtime.CompilerServices.Extension()> _
    3. Public Sub SetSelectedAll(lb As ListBox, enable As Boolean)
    4. If lb Is Nothing Then Throw New ArgumentNullException("ListBox object")
    5. If lb.SelectionMode = SelectionMode.One OrElse lb.SelectionMode = SelectionMode.None Then lb.SelectionMode = SelectionMode.MultiSimple
    6. For index = 0 To lb.Items.Count - 1
    7. lb.SetSelected(index, enable)
    8. Next
    9. End Sub
    10. End Module

    Aufruf;

    VB.NET-Quellcode

    1. Me.ListBox1.SetSelectedAll(True)
    2. ' oder
    3. Me.ListBox1.SetSelectedAll(False)
    Soviel mal wieder zum Thema MSDN. Man beachte die beiden Links und die kleinen aber microfeinen Unterschiede.
    Oder seht ihr etwa auf den ersten Blick, ob der Text zu WinForms oder WPF gehört? Oder auf den zweiten? Oder gar nicht?

    msdn.microsoft.com/en-us/libra…ls.listbox(v=vs.110).aspx
    msdn.microsoft.com/en-us/libra…ms.listbox(v=vs.110).aspx

    Wollte ich das ausdrucken, dann würde ich ne Rolle Klopapier einspannen. Dann kann man den Ausdruck wenigstens noch sinnvoll nutzen.

    Die Extension-Methode finde ich gut. Wenn man sowas nicht täglich nutzt, dann geht das schnell wieder verschütt
    und man muss ewig rumsuchen, wie man sowas korrekt hinschreibt.
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!

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