Laufwerke anzeigen (Denkfehler)

  • VB.NET
  • .NET 5–6

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

    Laufwerke anzeigen (Denkfehler)

    Hallo Zusammen,
    irgendwie stehe ich gerade mächtig auf der Leitung!
    Ich habe zwei ComboBoxen welche die Verfügbaren Laufwerke anzeigen sollen.
    In der tseComboBox1 sollen nur Laufwerke (USB-Stick) angezeigt werden welche den Namen SWISSBIT tragen.
    dies klappt auch
    In der zweiten ComboBox tsespoComboBox1 sollen nur Netz-Laufwerke angezeigt werden.
    Dies klappt aber nicht.
    Wenn ich die Drivetype für die tsespoComboBox1 auf Removable umstelle werden alle USB Laufwerke angezeigt leider auch das mit den Namen Swissbit was dort nicht erscheinen sollte.
    Wo ist mein Denkfehler das in der zweiten ComboBox nicht fie richtigén Laufwerke angezeigt werden.
    Hat jemand eine Idee


    VB.NET-Quellcode

    1. With tseComboBox1
    2. .BeginUpdate()
    3. .Items.Clear()
    4. For Each drv As IO.DriveInfo In IO.DriveInfo.GetDrives
    5. If drv.DriveType = IO.DriveType.Removable Then ' Removable = USB Stick
    6. If drv.VolumeLabel.StartsWith("SWISSBIT") Then
    7. tseComboBox1.Items.Add(drv.Name)
    8. End If
    9. If drv.DriveType = IO.DriveType.Network Then ' Network = Netzwek
    10. tsespoComboBox1.Items.Add(drv.Name)
    11. End If
    12. End If


    CodeTags gesetzt ~VaporiZed

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

    Jürgen_D schrieb:

    Hat jemand eine Idee
    Fange an zu debuggen:
    Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Jürgen_D schrieb:

    das programm läuft ja
    Offensichtlich nicht.
    Setze einen Haltepunkt rein und überzeuge Dich davon, dass Dein Programm das tut, was Du glaubst dass es tut :!:
    Was zeigt denn der Explorer an?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Schau Dir mal Deine Bedingungen an. Als erstes soll zutreffen, dass es ein Removable ist. Und wenn dies zutrifft, prüfst Du, ob es sich Swissbit nennt oder ein Netzlaufwerk ist. Netzlaufwerke werden also nur dann beachtet, wenn sie Removable sind. Ist das gewollt und logisch?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Der Grund, warum in der zweiten ComboBox tsespoComboBox1 nicht die richtigen Laufwerke angezeigt werden, ist, dass Sie die Überprüfung auf DriveType.Network innerhalb der Schleife für die Laufwerke mit DriveType.Removable durchführen. Das bedeutet, dass die If-Bedingung für DriveType.Network niemals erfüllt wird, da nur Laufwerke mit DriveType.Removable hinzugefügt werden.

    Um dieses Problem zu beheben, sollten Sie die Überprüfung auf DriveType.Network in eine separate Schleife oder eine separate Bedingung auslagern. Hier ist ein Beispiel, wie Sie das machen könnten:

    VB.NET-Quellcode

    1. With tseComboBox1
    2. .BeginUpdate()
    3. .Items.Clear()
    4. For Each drv As IO.DriveInfo In IO.DriveInfo.GetDrives
    5. If drv.DriveType = IO.DriveType.Removable AndAlso drv.VolumeLabel.StartsWith("SWISSBIT") Then
    6. tseComboBox1.Items.Add(drv.Name)
    7. End If
    8. Next
    9. .EndUpdate()
    10. End With
    11. With tsespoComboBox1
    12. .BeginUpdate()
    13. .Items.Clear()
    14. For Each drv As IO.DriveInfo In IO.DriveInfo.GetDrives
    15. If drv.DriveType = IO.DriveType.Network Then
    16. .Items.Add(drv.Name)
    17. End If
    18. Next
    19. .EndUpdate()
    20. End With


    In diesem Beispiel wird zuerst die Schleife für DriveType.Removable-Laufwerke ausgeführt und dann eine separate Schleife für DriveType.Network-Laufwerke. Beachten Sie, dass ich auch EndUpdate() verwendet habe, um die ComboBoxen nur einmal zu aktualisieren, wenn alle Elemente hinzugefügt wurden.