Mehrere PictureBox(en) speichern/laden wenn Form geschlossen/geöffnet wird?

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

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

    Mehrere PictureBox(en) speichern/laden wenn Form geschlossen/geöffnet wird?

    Hey ho :)

    Hab hier nen kleinen Code zusammengeschustert der auch einwandfrei funktioniert!
    Mein Vorhaben: Ich hab über 700 Bilder als Resource hinzugefügt die per ComboBox für eine PictureBox ausgewählt werden können.
    Der unten stehende Code funktioniert super für EINE PictureBox, doch habe ich insgesamt 7, die alle über ihre eigene ComboBox verfügen und die gleichen Resourcen benutzen.

    User klickt also einen Namen in der ComboBox -> Bild wird in PictureBox geladen (das eben mit 7 PictureBox-en).
    Meine Frage: Wie kann ich den unten stehenden Code auf mehrere PictureBox-en anwenden?

    Ich habe bisher keinen Weg gefunden der funktioniert :D
    Danke für eure Hilfe!

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    2. Dim ms As New IO.MemoryStream
    3. PictureBox1.Image.Save(ms, Drawing.Imaging.ImageFormat.Png)
    4. Dim s As String = System.Text.Encoding.Default.GetString(ms.ToArray)
    5. My.Settings.pbImage = s
    6. End Sub
    7. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    8. If My.Settings.pbImage <> "" Then
    9. Dim b() As Byte = System.Text.Encoding.Default.GetBytes(My.Settings.pbImage)
    10. PictureBox1.Image = Image.FromStream(New IO.MemoryStream(b))
    11. End If
    12. End Sub
    700 Bilder in den Ressourcen... 7 PictureBoxen und 7 Comboboxen. Was für ein Projekt genau machst du denn?

    Zu deiner Frage:
    Den Inhalt von Form Load/close in eigene Methoden auslagern.
    PictureBoxen per Schleife durchgehen und zugehörige Methode zum speichern/laden aufrufen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Das Projekt soll nur eine Gedächtnisstütze für ein Spiel sein, wo man eben zwischen verschiedenen Ressourcen auswählen kann.
    Die 7 7 7 Kombination ist nur Zufall :D

    Wie genau stelle ich die Auslagerung an?
    Habe mir meinen jetzigen Code aus Google Suchen zusammengetragen :)
    Wüsste nicht wirklich warum der Code der ComboBox wichtig ist,
    da ich ja die PictureBox bei schließen gespeichert brauche und nicht die ComboBox.

    Aber wenn es hilft, hier:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. Dim pic = CType(My.Resources.ResourceManager.GetObject(CStr(ComboBox1.SelectedItem)), Image)
    3. PictureBox1.Image = pic
    4. End Sub​
    Warum das ganze nicht als Funktion, die dir dein Bild zurück gibt? extra Sub?
    dann ist es egal wie oft du das aufrufst.
    Wenn du da noch deine Combobox incl. der passenden Picturebox übergibst, is doch alles schick.


    Oder geht es um etwas aufwändigeres?
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:

    Mergy schrieb:


    Habe mir meinen jetzigen Code aus Google Suchen zusammengetragen :)

    Ah ok, dann steig ich hier aus. Bin hier um zu helfen, nicht als Codeschreiber für C&P-ler
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Ah ok, dann steig ich hier aus. Bin hier um zu helfen, nicht als Codeschreiber für C&P-ler

    Kann ich verstehen, trotzdem danke :)

    Acr0most schrieb:

    Oder geht es um etwas aufwändigeres?

    Ist nichts aufwendiges, 7x ComboBox für 7x PictureBox, das ist alles :)
    Ich möchte einfach dass jede PictureBox ihre angezeigten Bilder bei Schließen beibehalten und mit dem oben genannt Code geht es eben nur für eine.

    Mergy schrieb:

    und mit dem oben genannt Code geht es eben nur für eine.


    In deinem Code hast du Zweisungen, sodass ein Bild direkt in PictureboxX geladen wird.
    Dann überlege wie du den Code erstmal kopieren kannst und so anpassen kannst, dass es eine andere PictureBoxY füllt.
    Wenn du danach hinbekommst, ein anderes Bild in PictureBoxY zu laden, kannst du das für die weiteren genauso machen. Und wenn das läuft können wir uns gern drüber unterhalten wie du das ggf. mit Funktionsaufruf o.ä. verschönern kannst. Erstmal musst du die Basics dazu verstehen - auch was jede einzelne Codezeile tut.


    MfG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    @Mergy Diese 7 PictureBoxen befinden sich in wievielen Formen?
    Du musst in jedem Fall für jede einzelne PictureBox, egal in welcher Form sie liegt, ein eigenes Setting anlegen, in dem Du den Namen ablegst. Dann musst Du Dir nur noch die Zuordnung der Namen zu den PictureBoxen im Code merken, da kannst Du z.B. ein Dictionary(Of String, PictureBox) verwenden.
    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!