PictureBox Pfade per For Schleife Festlegen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von MemoAnMichSelbst.

    PictureBox Pfade per For Schleife Festlegen

    Hallo an alle, ich habe jetzt schon länger gegooglet aber finde leider keine Lösung... Und zwar hab ich 42 PictureBoxen deren Bild Pfad ich per For Schleife Festlegen möchte.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Hero1Pic.Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen("1", "Pic") & ".png")
    2. Hero2Pic.Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen("2", "Pic") & ".png")
    3. Hero3Pic.Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen("3", "Pic") & ".png")
    4. Hero4Pic.Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen("4", "Pic") & ".png")
    5. Hero5Pic.Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen("5", "Pic") & ".png")
    6. Hero6Pic.Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen("6", "Pic") & ".png")
    7. Hero7Pic.Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen("7", "Pic") & ".png")
    8. Hero8Pic.Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen("8", "Pic") & ".png")
    9. Hero9Pic.Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen("9", "Pic") & ".png")
    10. Hero10Pic.Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen("10", "Pic") & ".png")


    Das obige sind im Prinzip die Pfade, in einer INI Datei ist festgelegt wie das jeweilige Bild heisst, für alle 42 Boxen möchte ich nicht jede Zeile Schreiben sondern würde es gerne per For schleife Lösen, jedoch scheiterte jeder bisherige ansatz...
    könnt ihr mir evtl. dabei behilflich sein ?

    Der bisher Vielversprechendste Versuch war folgender :

    Spoiler anzeigen

    VB.NET-Quellcode

    1. For d As Integer = 1 To CInt(Main.HeroINI.WertLesen("MaxHeros", "Now"))
    2. Dim Gbo2 = BuyHeroPanel.Controls("Hero" & d.ToString())
    3. Dim HeroPic = Gbo2.Controls("Hero" & d.ToString() & "Pic")
    4. If HeroPic IsNot Nothing Then
    5. HeroPic.Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen("1", "Pic") & ".png")
    6. End If
    7. Next


    Jedoch bekomme ich dabei die Fehlermeldung : Fehler 1 "Image" ist kein Member von "System.Windows.Forms.Control". G:\Programmieren\Visual\tests\Idle\Idle\BuyHero.vb 40 17 Idle

    Ich freue mich auf eure (hoffentlich xD) hilfreichen Antworten Grüße
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    asusdk schrieb:

    per For schleife
    Momentan sehe ich so was:

    VB.NET-Quellcode

    1. Dim pb() = {PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5}
    2. For i = 0 To pb.Length - 1
    3. pb(i).Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen((i + 1).ToString, "Pic") & ".png")
    4. Next
    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!
    Liegen die Pictureboxen denn alle zusammen auf einem Control?
    Oder sind die im Programm mehr oder weniger verteilt?
    Gibt es noch andere Pictureboxen die davon ausgeschlossen werden sollen?
    Sonst könntest du mit for each alle Controls durchlaufen, prüfen ob der Typ eine Picturebox ist und dann das Bild zuweisen.

    VB.NET-Quellcode

    1. ​Imports System.IO
    2. Public Class Form3
    3. Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. Dim fi As FileInfo
    5. Dim pb As PictureBox
    6. For Each Control In Me.Controls
    7. If TypeOf (Control) Is PictureBox Then
    8. pb = DirectCast(Control, PictureBox)
    9. fi = New FileInfo(Path.Combine("C:\Temp\Testbilder\", String.Concat(pb.Name, ".jpg")))
    10. If fi.Exists Then pb.SizeMode = PictureBoxSizeMode.StretchImage : pb.Image = Image.FromFile(fi.FullName)
    11. End If
    12. Next
    13. End Sub
    14. End Class

    Sowas würde gehen wenn auf einer Form zB. alle Pictureboxen mit Bildern gefüllt werden sollen.
    Das würde für alle Pictureboxen passen, bei denen der Name = dem Bildnamen aus dem Pfad C:\Temp\Testbilder ist.
    Wenn noch andere Controls auf der Form liegen könntest nen Panel drauf legen auf denen du alle Pictureboxen zusammenfasst. Dann wäre es halt nicht mehr Me.Controls sondern Panelname.Controls
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „MemoAnMichSelbst“ ()

    Im endeffekt ist das ganze Folgendermaßen :

    Es ist eine Panel Control, in dieser Panel Control sind 42 Groupboxen mit den namen : Hero1, Hero2 usw. in jeder dieser Groupboxen ist eine 40 x 40 große Picturebox mit den Namen : Hero1Pic, Hero2Pic usw.
    und ich würde gerne dafür sorgen das diese Boxen per schleife ihr Image bekommen =)

    Hero1Pic dann eben : Hero1Pic.Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen("1", "Pic") & ".png")
    und dann die zweier usw. ^^

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim pb() = {Hero1Pic, Hero2Pic, Hero3Pic, Hero4Pic, Hero5Pic, Hero6Pic, Hero7Pic, Hero8Pic, Hero9Pic, Hero10Pic}
    2. For i = 0 To pb.Length - 1
    3. pb(i).Image = Image.FromFile(Main.Path & "\" & Main.HeroINI.WertLesen((i + 1).ToString, "Pic") & ".png")
    4. Next


    Scheint einwandfrei zu funktionieren, jetzt müsste/würde ich nur noch gerne hinkriegen das er das genauso macht nur ohne jedwede PictoreBox per Name explizit zu erwähnen, würde sonst ne seeeehr lange Zeile werden mit 42 Pictureboxen ^^ wenn das nicht geht ist das so immerhin der beste Ansatz =) Danke euch vielmals !

    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

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

    Das ist nicht so dolle Code-Design, wenn du 42 festverdrahtete Groupboxen aufs Form legst.


    Ja ideal ist die Lösung sicher nciht das stimmt, aber es sieht einfach besser aus als wenn die Controls einfach so irgendwo rumstehen ^^
    Ich will im großen und ganzen ne art "idle" game machen, aber Flash/Java/Html beherrsche ich absolut 0 daher ist Visual die einzige Lösung für mich und da ich auch hier noch relativ neu bin muss ich arbeiten mit was ich arbeiten kann abundzu fallen mir unterm arbeiten dann bessere lösungswege auf =) Ich wollte es Eigentlich schon anders Lösen aber mir ist kein besserer Ansatz eingefallen ^^
    Aber hey, immerhin versuch ich es ;P
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Und hast du probiert ob du mit ner For Each Control for Blubb.Controls die Boxen ansprechen kannst oder nicht?
    Habe hier gerade kein Windows. Kann es gerade nicht testen. Kann sein dass er bei Me.Controls nur die findet die auf der Form direkt liegen. Dann müsstest dir nen Array aller Controls machen wie schon geschrieben und kannst die dann durchlaufen.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D