Announcement

Collapse
No announcement yet.

Schleife in Listbox bearbeitet nur obersten Eintrag?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Schleife in Listbox bearbeitet nur obersten Eintrag?

    Guten Abend!
    Nachdem ich heute schon mehrere Stunden mit dem Problem verbracht habe und zu keiner Lösung gekommen bin, hier meine Frage in die Runde.
    In ein Listbox werden sämtliche Fotos eines Verzeichnisses geladen(Eintrag ist der vollständige Pfad). Auf Knopfdruck soll für jede selektierte (oder auch generell jede Datei) Datei in der Listbox ein verkleinerter Thumbnail gespeichert werden. Das Speichern des Thumbnail funktioniert auch soweit, allerdings wird immer nur von der in der Listbox an oberster Stelle stehenden Datei ein Thumbnail abgespeichert(gut zu erkennen an der MsgBox mit dem Dateinamen), jedoch genau so oft, wie Dateien in der Listbox aufgelistet sind, wenn sich in dem Verzeichnis also 50 Fotos befinden wird 50x das zu oberst markierte Bild abgespeichert, jedesmal wie gewollt unter anterem Namen. Wenn ich die beiden Routinen jedoch ins ListBox1_SelectedIndexChanged-Ereignis reinstopfe wird bei jedem Klick auf eine der aufgelisteten Dateien der korrekte Thumbnail abgespeichert. Nur automatisch gehts eben nich... Wo hab ich den Fehler gemacht, warum bleibts beim 1. Eintrag hängen, und das so oft wie Einträge in der Listbox sind??

    Aufruf der Schleife:

    [highlight=vbnet]
    For Each item As Object In ListBox1.SelectedItems
    dateipfad = ListBox1.SelectedItem
    MsgBox(dateipfad)
    reading3()
    adding()
    Next
    [/highlight]

    Und hier die beiden aufgerufenen Routinen:
    [highlight=vbnet]
    Private Sub reading3()
    PictureBox1.Image = Nothing

    'Thumbnail generieren
    extrainfos_read = New clsJPEGExtraInfos
    Dim errorMessage As String = ""
    If Not GetJPEGExtraInfos(dateipfad, extrainfos_read, errorMessage) Then
    MessageBox.Show(errorMessage, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    Else
    Try
    With extrainfos_read
    PictureBox1.Image = .Thumbnail.Clone

    End With
    Catch ex As Exception
    PictureBox1.Image = Nothing
    End Try
    End If
    End Sub

    Private Sub adding()
    Dim fname As String
    fname = ""
    Dim bt As New Bitmap(PictureBox1.Image) ', 600, 800)
    fname = "d:\Temp\" & getrandombystring("abcdefghijklmnopqrstuvwxyz", 6) & getrandombystring("0123456789", 6) & ".jpg"
    bt.Save(fname, System.Drawing.Imaging.ImageFormat.Jpeg)

    End Sub
    [/highlight]

    HILFE!!!

  • #2
    Weil du immer mit

    dateipfad = ListBox1.SelectedItem

    gerade selectierte Item der Box gehst und das item im For Each nicht benutzt
    Christian

    Comment


    • #3
      Aber sollte nicht das selektierte item gerade durch die schleife jedesmal um eins nach unten wandern? Es sind ja mehrere selektiert... versteh ich nicht, bei anderen Routinen dieser Art (Files löschen, verschieben, mergen...) funktionierts Vor allem ist es ja nicht das zuletzt angeklickte sondern das an oberster Stelle stehende....

      Wie müsste das denn optimalerweise gelöst sein?

      Comment


      • #4
        versteh ich nicht, bei anderen Routinen dieser Art (Files löschen, verschieben, mergen...) funktionierts
        Das bezweifle ich

        Warum sollte sich an der Selection etwas ändern, bloß weil du die Elemente die ausgewählt wurden bearbeitest?

        Mit dem For Each läufst du die ausgewähltem Elemente ab. Also sollte doch wohl das Objekt des For Each genutzt werden
        Christian

        Comment


        • #5
          *schäm* das wars natürlich, hätte ich auch selbst drauf kommen können... ich bin wohl urlaubsreif.... VIELEN DANK!!!!!

          Comment

          Working...
          X