Zippen mit VB.NET ( Batch umschreiben )

  • VB.NET

Es gibt 100 Antworten in diesem Thema. Der letzte Beitrag () ist von Amelie.

    Zippen mit VB.NET ( Batch umschreiben )

    Hey
    Irgendwie bekomme ich es nicht hin.

    Die Combobox wird zwar mit den Laufwerken ( außer dem CDLaufwerk ) gefüllt wenn ich sie aufklappe aber zu beginn ist sie leer.
    Da sollte eigentlich das Laufwerk C angezeigt werden.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives
    3. lwBox1.Items.Add(drive.Name & " [" & drive.VolumeLabel & "]")
    4. Next
    5. lwBox1.Focus()
    6. lwBox1.SelectedItem.Add(lwBox1.Items.Item(2)) '2 ist doch der Dritte Wert?? Laufwerke A&B sind auch vorhanden
    7. End Sub


    ausgelagert aus Zippen mit VB5 ( Batch umschreiben ), da nun VB.NET verwendet wird ~VaporiZed
    Bilder
    • lwBox.jpg

      18,93 kB, 284×198, 13 mal angesehen

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

    Amelie schrieb:

    lwBox1.SelectedItem.Add(lwBox1.Items.Item(2)) '2 ist doch der Dritte Wert?? Laufwerke A&B sind auch vorhanden

    VB.NET-Quellcode

    1. lwBox1.SetSelected(lwBox1.FindString("C:"),True) 'wählt automatisch das C-Laufwerk aus, egal an welcher Position

    Und ja, bitte den obigen Post beachten. Ohne Option Strict On läufst du immer wieder in solche Fallen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Der Kommentar in Zeile#9 ist zwar richtig, die Zeile macht trotzdem nicht das, was Du denkst. Was klar wird, wenn Du den Vorpost von EdR beachtest.
    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.
    Hey
    So gelesen und einige umgesetzt.
    Jetzt habe ich das Problem, es wird KEIN Fehler angezeigt aber die Sache, das dass CDRom ausgeblendet werden soll klappt nicht wenn eine CD eingelegt ist.
    Oder muss ich dafür eine seperate Sub schreiben?

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives
    3. lwBox1.Items.Add(drive.Name & " [" & drive.VolumeLabel & "]")
    4. lwBox1.Focus()
    5. lwBox1.SelectedIndex = lwBox1.FindString("C:\") ' Das klappt nun
    6. ' Hier soll eigentlich das CDRom ausgeblendet werden...???
    7. If drive.DriveType = IO.DriveType.CDRom Then
    8. lwBox1.Items.Remove(CInt(drive.Name & " [" & drive.VolumeLabel & "]"))
    9. End If
    10. Next
    11. End Sub
    Ich würd sagen: Falsche Herangehensweise. Anstatt es erst hinzuzufügen und dann versuchen* es zu löschen, mach doch die Überprüfung schon in Zeile#4. Pseudocode: Wenn Typ = CDROM Dann Continue For

    Was hat es mit dem .Focus auf sich? Brauchste nicht.

    *schlechter Versuch. Du wandelst einen Namen/Text in einen Integer um. Was soll da gefunden werden? Mit FindString weiter oben warst Du doch schon auf der richtigen Fährte. Kombiniere es mit RemoveAt. Oder belass es bei Remove, aber lass das CInt weg.
    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.
    So klappt es nun ;)

    PS: Das mit dem "Focus" habe ich gelesen, das es wichtig wäre aber wie sich zeigt gehts auch ohne...

    VB.NET-Quellcode

    1. For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives
    2. If drive.DriveType = IO.DriveType.CDRom Then
    3. Continue For
    4. lwBox1.Items.Remove(drive.Name & " [" & drive.VolumeLabel & "]")
    5. End If
    6. lwBox1.Items.Add(drive.Name & " [" & drive.VolumeLabel & "]")
    7. lwBox1.SelectedIndex = lwBox1.FindString("C:\")
    8. Next
    Ehm … Zeile#5 kannst Du löschen. Das Continue For sorgt dafür, dass es nach Erreichen von Zeile#4 gleich mit dem nächsten drive in Z#1 weitergeht. Continue For ist ein Abbruch-und-mit-dem-nächsten-Element-weitermachen-Befehl.
    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.

    Amelie schrieb:

    Jetzt habe ich das Problem, es wird KEIN Fehler angezeigt aber die Sache, das dass CDRom ausgeblendet werden soll klappt nicht wenn eine CD eingelegt ist.
    Ja, das ist ein Problem, dass im Form_Load Fehler nicht angezeigt werden.
    Verlager den Code ins Form_Activated - Event, und die Fehler werden angezeigt.
    (ich finds immer besser, man hat den Fehler mal gesehen, ehe man Code einkopiert, der ihn verschwinden lässt)
    Ja, was ist denn da los?

    ErfinderDesRades schrieb:

    Verlager den Code ins Form_Activated - Event
    Doch wohl eher in den EventHandler, oh Meister der Begriffgenauigkeit.

    Aber trotzdem kurzer Einspruch. Wenn, dann in den Form_Shown-EventHandler damit. Sonst wird der Code jedes Mal durchlaufen, wenn das Programm den Fokus wiederbekommt oder aus dem Minimiert-Zustand wieder in den normalen oder Maximiertzustand übergeht.
    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.
    Ehm … Zeile#5 kannst Du löschen.

    Das hatte ich schon getan. ;)

    Was muss ich denn nun nehen?

    lwBox1Click() oder Change wenn ich einen Eintrag aus der Box anklicke und das z.B. an ein Label weiter geben möchte.
    Das was ich bisher gefunden habe ist so verwirrend. ;(

    ----
    OK
    So klappt es nun. Ist das OK so oder ist das zu verbessern??

    VB.NET-Quellcode

    1. ​Private Sub lwBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lwBox1.SelectedIndexChanged
    2. lLW2.Text = "Aktl. Laufwerk " & CStr(lwBox1.SelectedItem)
    3. End Sub

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

    Passt. Wobei Du statt CStr(lwBox1.SelectedItem) auch lwBox1.SelectedItem.ToString nehmen kannst.
    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.
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Ich benutze das Label erstmal nur zur Orientierung.
    Ich lerne ja gerade noch das ganze mit dem .Net

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

    @ErfinderDesRades
    Ich versuche gerade das Script so umzuschreiben, das in der Combobox nur der Laufwerksbuchstabe steht z.B. " c:\ " aber dann im Label Buchstabe und Bezeichnung.
    Das mit der ComboBox klappt aber ich bekomme die Bezeichnung nicht zum Label.

    Muss ich das in der Sub Change neu auslesen? Bitte um Hilfe.
    Oh, da geht's ja schon langsam in Richtung korrekter Datenhaltung. Und schon wäre es m.E. sinnvoll, mit einer kleinen Klasse anzufangen.

    VB.NET-Quellcode

    1. Public Class DriveInfo
    2. Property DriveLetter As String
    3. Property Name As String
    4. End Class

    dann noch eine Liste innerhalb von Form1 (wäre eine Überlegung das bald umzubenennen), die die DriveInfo-Pakete aufnimmt:

    VB.NET-Quellcode

    1. Private ReadOnly DriveInfos As New List(Of DriveInfo)

    Dann kannst Du nämlich schon objektorientiert arbeiten. Du erstellst neue DriveInfo-Instanzen, befüllst deren Name- und DriveLetter-Properties mit Daten und packst die Instanzen zur Liste hinzu. Und schwupps: Alle Daten sinnvoll zugreifbar in einer Liste. Dann noch ein wenig DataBinding und alles ist problemlos in ComboBoxen, ListBoxen etc. anzeigbar.
    Wenn das zu schnell ging, gib bescheid, ab welcher Stelle Du nicht klarkommst und wir helfen weiter.
    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.