Visual Basic 2010 Bild von einer Dynamsich erstellter PictureBox herausfinden

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ClonkAndre.

    Ich blick's trotzdem nicht. Was willst Du genau? Geht's darum, dass Du nicht weißt, wie Du an die PicBox rankommst? Oder was ist bei NameDeinerPicBox.Image unzureichend?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Nein..
    Edit: Ich möchte jedes Control in ein Panel ermitteln was Dynamisch erzeugt wird und alle in einer ListBox anzeigen. Falls es eine PictureBox ist soll das Bild von dieser ausgelesen und angezeigt werden (nur der Bild name z.b. lol.png)

    Mein Code momentan:

    VB.NET-Quellcode

    1. Public Sub GetControls(ByRef control As Control)
    2. For Each cntrl As Control In control.Controls
    3. TranslateControl(cntrl)
    4. Next
    5. End Sub
    6. Private Sub TranslateControl(ByRef cntrl As Control)
    7. Try
    8. Dim info As String = cntrl.GetType.Name & " " & cntrl.Location.ToString 'Zwischenspeicher und hier soll noch ermittelt werden welches Bild gerade in der geladenen PictureBox ist (ein komplettes Beispiel unten)
    9. ListBox1.Items.Add(info) 'dann aus dem Zwischenspeicher die Daten lesen und in einer ListBox anzeigen lassen
    10. For Each item As System.Windows.Forms.Control In cntrl.Controls
    11. TranslateControl(item)
    12. Next
    13. Catch ex As Exception
    14. 'fehler blabla
    15. End Try


    Hier mal ein kleines Beispiel:

    Control - - - Location - - - Das Bild
    PictureBox {x=43, y=57} C:\Lol.pnh

    falls keine PictureBox dann halt ohne die Bild datei (C:\Lol.pnh)
    Button {x=2, y=4}

    Hoffentlich verständlich
    Du versuchst cntrl mittels DirectCast in eine PicBox umzuwandeln und holst Dir dann ImageLocation - falls der Pfad darin abgespeichert ist. Wäre eine Möglichkeit, die ich nutzen würde.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Also naja ich hab mal jetzt etwas rumprobiert aber mit DirectCast habe ich noch nie so wirklich mit gearbeitet, sieht es so denn schon akzeptabel aus? (Am ende wird das ) Blau makiert also geht's nicht)

    VB.NET-Quellcode

    1. Dim location As String = DirectCast(DirectCast(cntrl, PictureBox).ImageLocation.ToString)


    EDIT:
    Im Fehler steht: Zwei durch komma getrennte Argumente sind erforderlich
    doch ich weiß halt nicht was das zweite Argument ist :/

    DirectCast braucht 2 Sachen. 1. was will man umwandeln, 2. worin will man es umwandeln. Du hast beim äußeren DirectCast den Zieltyp nicht angegeben. Ist aber auch überflüssig:

    VB.NET-Quellcode

    1. Dim location As String = DirectCast(cntrl, PictureBox).ImageLocation

    ImageLocation ist bereits vom Typ String
    Fehlerbehandlung nicht vergessen. Nicht jedes Control kann in eine PicBox umgewandelt werden. Aber das ist eine andere Baustelle.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @ClonkAndre Falls Du unterscheiden willst, ob da rot.png oder grün.png geladen ist - das musst Du Dir beim laden merken.
    Mach Dir ein Enum mit denselben Namen wie die Bilder heißen, und wenn Du ein Bild lädtst, merkst Du Dir das in der kommunizierenden Enum-Variable.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!