OpenFileDialog(multiselect) in PictureBox

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    OpenFileDialog(multiselect) in PictureBox

    Guten Morgen,

    ich bin gerade dabei ein kleines Programm zu schreiben, welches Bilderdateien(jpg, png) in Tiff Dateien umwandelt.
    Soweit funktioniert mein Code. Das ausgewählte Bild wird in einer PictureBox angezeigt.

    Nun möchte ich Einbauen, das man mehrere Bilder (unbegrenzt) gleichzeitig einlesen kann, welche dann in einzelnen PictureBoxen angezeigt werden.
    Leider habe ich keine Ahnung wie ich für jedes weitere Bild eine PictureBox automatisch erstellen lassen kann und die einzelnen Bilder der jeweiligen PictureBox zuweisen kann.
    Ich hoffe Ihr versteht was ich meine und könnt mir dabei helfen :D
    Indem Du zur Laufzeit neue PicBoxen erstellst und sie dem Formular hinzufügst:

    VB.NET-Quellcode

    1. Private Sub CreateNewPicBoxWith(ImageForThePicBox As Image)
    2. Static CurrentIndex Integer = 0
    3. With NewPicBox
    4. .Width = 100
    5. .Height = 100
    6. .Image = ImageForThePicBox
    7. .Name = "PicBox" & CurrentIndex.ToString
    8. .x = 0
    9. .y = 100 * CurrentIndex
    10. End With
    11. Me.Controls.Add(NewPicBox)
    12. End Sub

    Mit einem FlowLayoutPanel kann man sich natürlich die Koordinatenangaben sparen, denn das kümmert sich ja automatisch um die passende Position. Der Name kann auch weggelassen werden, da dann eben vom Compiler einer erzeugt wird. Und dann ist auch die Static-Variable überflüssig.
    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.

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

    Wow danke für die sehr schnelle Antwort. Habe nur noch ein Problem. Wenn ich deinen Code so übernehme sagt er mir "NewPicBox" wurde nicht deklariert. Auf Grund der Schutzstufe ist kein Zugriff möglich.
    Und kannst du mir vielleicht noch sagen wie ich die Picturebox dann zu meinem FlowLayoutPanel hinzufügen kann?
    @BunkerBaerIGER ;)

    VB.NET-Quellcode

    1. Dim NewPicBox As New PictureBox
    2. With NewPicBox
    3. '...
    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!
    Ah, damn it. Die wchtigste Zeile vergessen X/
    Mit dem FlowLayoutPanel: Indem Du nicht schreibst
    Me.Controls.Add(NewPicBox)
    sondern
    DeinFlowLayoutPanel.Controls.Add(NewPicBox)

    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.
    Dazu kannst du dir ne PictureBox_Click Sub machen und darin das angeklickte Control löschen.

    Dann brauchst du deinen neu erstelllten Boxen nur noch das .Click Ereignis per AddHandler darauf verweisen.

    ala:
    AddHandler .Click, AddressOf PictureBox_Click mit in deine CreateRoutine.

    Und das dann als SubClick:

    VB.NET-Quellcode

    1. Private Sub PictureBox_Click(sender As Object, e As EventArgs)
    2. Me.Controls.Remove(DirectCast(sender, Control))
    3. End Sub
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Habe das ganze jetzt so gelöst.

    VB.NET-Quellcode

    1. Private Sub PictureBox_Click(sender As Object, e As EventArgs)
    2. FlowLayoutPanel1.Controls.Remove(DirectCast(sender, Control))
    3. End Sub
    4. Private Sub CreateNewPicBoxWith(ImageForThePicBox As Image, index As Integer)
    5. Dim NewPicBox As New PictureBox
    6. With NewPicBox
    7. .Width = 100
    8. .Height = 100
    9. .Image = ImageForThePicBox
    10. .Name = "PicBox" & index.ToString
    11. .BorderStyle = BorderStyle.FixedSingle
    12. .SizeMode = PictureBoxSizeMode.StretchImage
    13. End With
    14. AddHandler NewPicBox.Click, AddressOf PictureBox_Click
    15. FlowLayoutPanel1.Controls.Add(NewPicBox)
    16. End Sub


    Hoffe das ist so richtig
    Sieht plausibel aus. Wenn es sich auch so verhält, wie Du wolltest, dann passt ja alles.
    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.