Wie erzeuge ich in VB 2017 zur Laufzeit eine Picturebox in einem Tablelayoutpanel?

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

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Wie erzeuge ich in VB 2017 zur Laufzeit eine Picturebox in einem Tablelayoutpanel?

    Ich komme einfach nicht dahinter:
    Ich erzeuge in meinem VB 2017-Programm zur Laufzeit ein Array mit Tablelayoutpanels ( tlpArray(i), je 1 Spalte, 2 Reihen). Klappt prima.
    Aber nun soll in Reihe 1 eine Picturebox rein, die wiederum mit einem Backgroundimage gefüllt werden muss. Versucht habe ich das mit

    tlpArray(i).Controls.Add(New PictureBox(), 0, 0)

    Aber wie weise ich dieser Picturebox jetzt Eigenschaften zu?

    Dasselbe Problem mit Reihe 2: Hier brauche ich eine Multiline-Textbox.
    In C# scheint das bereits beim add mittels {...} zu gehen, aber in VB finde ich keine Lösung.
    Willkommen im Forum.
    Das machst Du 2-schrittig.
    Erst Die PicBox an sich anlegen, Eigenschaften setzen, danach die PixBox dem TLP zuordnen.
    Also:

    VB.NET-Quellcode

    1. Dim NewPicBox = New PictureBox
    2. NewPicBox.Width = 100
    3. NewPicBox.Height = 100
    4. '...
    5. tlpArray(i).Controls.Add(NewPicBox, 0, 0) '*

    *ungeprüft übernommen

    das mit {} geht auch, ist aber irgendwann unübersichtlich:

    VB.NET-Quellcode

    1. tlpArray(i).Controls.Add(New PictureBox With {.Width = 100, .Height = 100})

    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.
    @Reblaus Ebenfalls Willkommen im Forum. :thumbup:
    Mach es so, dann vergisst Du nix:
    Erstell Dir eine entsprechende GUI im Designer,
    öffne die FormX.Designer.vb und sieh Dir an, was der Designer mit dem betreffenden Control anstellt: InitializeComponents().
    Das empfindest Du nach.
    Einiges kannst Du sicher weglassen, aber vergewissere Dich, dass dann alles so funktioniert, wie es soll.
    Feddich.
    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!
    Das machst Du über den (Ansicht ->) Projektmappen-Explorer. Wichtig: Du musst da noch oben rechts auf "Alle Dateien anzeigen" klicken, sonst wird die Form.Designer.VB nicht gezeigt.
    Aber: Das ist nicht der Designer (der Designer ist der Form-Entwurf), sondern der Designer-Code bzw. die Designer-Code-Datei. Aber diese ist eh Dein Ziel, da dort drinsteht, welchen Code VS für die Erstellung des Forms verwendet.
    Bilder
    • PME.png

      10,88 kB, 238×282, 79 mal angesehen
    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.
    @VaporiZed Warum so kompliziert?
    @Reblaus Das geht viel einfacher:
    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!
    Unwissenheit
    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.
    Danke für die Tipps zum Designer. Hilft mir bestimmt beim nächsten Problem.
    @VB1963
    Grob gesprochen:
    Ich bastele an einer auf mich maßgeschneiderten Präsentationssoftware für

    - 4 Kategorien mit je
    - zwischen 8 und 20 Videos (insges. ca. 65 Videos) sowie
    - zwischen 3 und 8 Episoden je Video
    Na ja, ein paar weitere Zwischenstufen gibts noch.
    Ich habe mir die Aufgabe gesetzt, für diesen Filmschatz, der ja noch beständig wächst, ein Programm zu schreiben, mit dem ich gezielt aussuchen kann, welchen Film, welche Episode ich mir ansehen bzw. anderen präsentieren möchte. Und dazu habe ich eine GUI aufgebaut, die zur Laufzeit je nach Anzahl der anzuzeigenden Elemente dynamisch (mittels eines Control-Arrays, wie ich es noch aus VB6 kannte) Buttons mit Pictureboxes in einem FlowLayaoutPanel zur Auswahl anzeigt - durchweg in ein und derselben VB-Form!

    Bis zur Episodenauswahl klappte das gut und war relativ einfach, aber bei diesem letzten Schritt wollte ich nicht nur einen bebilderten Knopf, sondern zusätzlich einen Text ausgeben, aus dem knapp der Inhalt der Episode hervorgeht. Hierfür entschied ich mich, wie erwähnt, für dynamisch erzeugte TableLayoutPanels mit einer Spalte und zwei Zeilen. Oben sollte das Titelbild hinein, unten der Text.

    Warum dynamisch? Weil ich über den Index des Arrays m.E. schnell und unkompliziert Eigenschaften ändern kann. Und weil das System sich selbst erweitert, wenn ich neue Videos/Episoden hinzufüge. Einfach aufgrund der Anzahl von Dateien in verschiedenen Ordnern.

    Vielleicht gibt es andere Lösungen, aber mit Hilfe des Forums habe ich eine für mich befriedigende gefunden.
    Hi VB1963!
    Baumstruktur auf der Festplatte, keine Datenbank o.ä. Das Programm zeigt beim Start einfach die jpg-Dateien im vorgegebenen Hauptverzeichnis an, die ihrerseits den Namen des betreffenden Unterverzeichnis tragen, also z.B.: Afrika.jpg, Amerika.jpg, Asien.jpg. Klick darauf öffnet diesen Unterordne, z.B. Afrika, und liest die darin befindlichen jpg ein: Marokko.jpg, Kenia.jpg, Südafrika.jpg. Klick auf Marokko zeigt nun Rabat.jpg, Casablanca.jpg und Tanger.jpg an.
    So geht es weiter, bis zu den Ordnern mit den Episoden, in denen außer den jpg auch txt-Dateien mit den Beschreibungen stehen.

    Das Ganze ist noch etwas tiefer gestaffelt als in meinem Reisefilm-Beispiel erwähnt und enthält zudem neben den Filmen noch eine wesentlich umfangreichere Rubrik mit Fotos zu diversen Themen, dazu zwei Buttons, die per Zufall ein Video oder eine Foto-Serie anzeigen. Aber das war ja nicht Hintergrund meiner Frage. VaporiZed hat mir da genau den richtigen Schubs gegeben.