Controls Erstellen

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

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von xX-Nick-Xx.

    Controls Erstellen

    Moin Zusammen,

    Ich Versuche Aktuell Controls so wie auf dem Bild Automatisch zu Erstellen, und diese dann einer Datei zuzuweisen.

    Als Beispiel habe ich mal das hier fertig gemacht: (So soll es dann aussehen)

    weiß jemand ob sowas überhaupt möglich ist, und wenn ja wie?!

    Ich könnte auch 100x das manuell erstellen, aber Dynamischer wäre es wohl besser.



    Edit: Hat sich erledigt (Zumindest das Erstellen):

    VB.NET-Quellcode

    1. With Panel
    2. .BackColor = Color.White
    3. Me.FlowLayoutPanel1.Controls.Add(Panel)
    4. Controls.Add(Panel)
    5. Me.Panel.Controls.Add(Button)
    6. End With
    7. Me.FlowLayoutPanel1.Controls.Add(Panel)



    Nur wie weiße ich den Buttons auch den Code zu? (Google grade)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „xX-Nick-Xx“ ()

    xX-Nick-Xx schrieb:

    diese dann einer Datei zuzuweisen
    Was soll das konkret bedeuten?
    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.

    xX-Nick-Xx schrieb:

    wie ich den Code Zuweise
    Was soll das jetzt wieder bedeuten?
    Was soll denn in den Labels drinstehen? Sind die Dateien irgendwie besonders? Was soll im Gesamten daraus entstehen? Ist mir alles irgendwie noch zu wage, um es zu erfassen. Wieviele Labels soll es geben? Was soll da konkret rein? Wieviele Panels, PicBoxen, Gesamtpakete soll es geben?
    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.
    Es sollen mehrere Dateien ausgelesen werden, und der Inhalt der Datei wie zum Beispiel "Name" "Größe" und "Icon" beinhalten. (Als Beispiel)

    Die Menge an Dateien ist von User zu User Unterschiedlich

    Haben soll es 1x Picturebox, 2x Label, 1x Button

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xX-Nick-Xx“ ()

    Mach Dir ein UserControl, bestehend aus genau den von Dir genannten Komponenten/Controls. Dann liest Du die Dateieigenschaften aus und das Icon und fügst die Werte den Properties der UserControl-Controls hinzu. Mehrere dieser UserControls kannst Du dann einem FlowLayoutPanel oder einem TableLayoutPanel oder sonstewas hinzufügen. So bleibt Ordnung auf dem Form und die UserControls sehen aufbaumäßig gleich aus. Und viele UserControls hinzuzufügen ist wesentlich leichter, als für x Dateien x PicBoxen + 2x Labels + x Buttons hinzuzufügen.
    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.
    Hab ich auch soweit gemacht.


    Ich hab dies hier gefunden: Mehrere Button dynamisch erstellen?

    Sobald ich das Design dafür habe, muss ich nur noch schauen wie ich diesem eben den Code zuweise.
    (In der Regel sollen sie den Gleichen Code haben, nur vom Datei Count Anders.

    Mit AddhHandler sollte das mit dem Code ja klappen? @VaporiZed

    Ich weiß leider immer noch nicht, was Du damit meinst, Code zuzuweisen. AddHandler ist dafür da, Events mit EventHandler-Prozeduren zu verbinden, die nicht zur Designzeit koppelbar sind. Aber: Welche Event-EventHandler-Bindungen willst Du knüpfen? Solche Bindungen werden innerhalb eines UserControls (UC) nicht benötigt. Das UC weiß schon vorher, dass es 4 Labels, eine PicBox und einen Button hat. Wenn man also auf den Button klickt, kann man schon zur Designzeit festlegen, was passieren soll. AddHandler wird dann nur gebraucht, wenn das UC selber z.B. ein Event feuern soll und das Form darauf reagieren soll. Oder der UC-Button was feuert, worauf das Form reagieren soll. Was willst Du also koppeln? Und was meinst Du mit "Code zuweisen"?
    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.
    Also ich will zum Beispiel Button 4 Drücken und dann soll er mir Infos der 4. Datei Anzeigen.
    Oder Ich Klick Button 4 und er sagt mir den Namen von den Button
    Das Frag ich mich ja grade irgendwie wie ich das machen soll
    Das mein ich mit Code Zuweisen.

    Ich hoffe das war Verständlich

    xX-Nick-Xx schrieb:

    ich will zum Beispiel Button 4 Drücken und dann soll er mir Infos der 4. Datei Anzeigen.
    Woher kommen die Dateien? Welche Klasse kennt diese Dateien? Du kannst auch bei UC-Initialisierung dem UC auch die entsprechende Datei gleich mitgeben, sodass das UC die Datei kennt. Und dann die Daten selbständig an seine Sub-Controls verteilt.

    Ein Beispiel
    In der Formklasse:

    VB.NET-Quellcode

    1. Dim NeuesUC As New MeinDateiUserControl(Dateien(5)) 'also die 6. Datei in der fiktiven Liste namens Dateien

    und im UC:

    VB.NET-Quellcode

    1. Public Class MeinDateiUserControl
    2. Public Sub New(Datei As IO.FileInfo)
    3. LblFileName.Text = Datei.Name
    4. LblFileSize.Text = Datei.Length 'keine Ahnung, ob's die Length-Property gibt, aber vom Prinzip her
    5. End Sub


    xX-Nick-Xx schrieb:

    Ich Klick Button 4 und er sagt mir den Namen von den Button

    Öhm … Wat?
    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.
    Sagen wir mal ich hab 5 Buttons und 5 Dateien.
    Nun Möchte ich das Button5 die Datei 5, Button4 die Date4 und Button3 die Datei3 Öffnet.

    Wie stelle ich das an (Process.start)

    Das ist jetzt nur ein Beispiel, ich habe bislang nichts als das Design.

    Nachtrag: Danke, werde ich morgen ausprobieren

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xX-Nick-Xx“ ()

    Hast Du 5 Buttons in einem UC oder 5 UCs mit je 1 Button? Wenn letzteres, dann der gleiche Form-Code wie oben, nur dann im UC z.B.:

    VB.NET-Quellcode

    1. Public Class MeinDateiUserControl
    2. Private ReadOnly File As IO.FileInfo
    3. Public Sub New(Datei As IO.FileInfo)
    4. File = Datei
    5. End Sub
    6. Private Sub BtnOpenFile_Click(sender As Object, e As EventArgs) Handles BtnOpenFile.Click 'also ein Button
    7. System.Diagnostics.Process.Start(File.FullName)
    8. End Sub
    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, werde ich morgen Mal testen.

    Hab gedacht man könnte einen Sub für die Erstellten Button machen und dann einfach mittels des Namens die Datei Auswählen.

    z.B (vom Handy)
    Control.Add(Button)
    ...
    Public Sub Button ..... Button.Click
    If e.Name = 4_Button then
    Process.Start(Datei4)
    End If

    Aber da hab ich wohl wieder was falsch verstanden.

    Ich versteh leider nicht, wie Du das genau meinst. Ist vielleicht irgendwie umsetzbar, aber dazu solltest Du Trippelschritt für Trippelschritt ohne Pseudo-Codebeispiele erklären, wie Dein Programm genau ablaufen soll. Tu so, als ob Du es einem DAU oder alternativ einem Programmieranfänger erklären müsstest.
    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.
    Also mein Programm soll aus einem Ordner ZIP Dateien entpacken ( aus jeder ZIP 1x Bild und eine Textdatei ( die Anzahl der ZIP Dateien ist unterschiedlich als Beispiel sag ich einfach Mal 5 Also Count des Ordners)

    Das Bild soll in der Picturebox angezeigt werden.

    Der Text dann in den Labels.

    Und Button 1 soll die Datei öffnen und Button 2 sie Löschen

    Also z.B. Bild 1 zu Picturebox 1
    Label 1 zu Text1.txt
    Zum entpacken nehm ich Ionics.Zip

    Das Entpacken hab ich soweit auch schon fertig (Button1.Click


    Ich hoffe das war soweit erklärt, ansonsten schau ich morgen Mal das ich irgendwie was zeigen kann.

    Ist einfacher als erwartet:

    Form

    Quellcode

    1. Für jede ZipDatei im Ordner: Erstelle ein UC und übergib ihm eine ZipDatei


    UC

    Quellcode

    1. Konstruktor mit Dateiparameter:
    2. merk Dir die übergebende Datei
    3. Auspack-Button
    4. entpacke die Datei und schiebe das Bild in die PicBox, die Infos in die Labels
    5. Lösch-Button
    6. entferne die Daten aus den Controls und lösche die Datei


    Kein AddHandler, keine Codezuordnung ( ?( ), kein großer Aufwand
    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.
    Also ich habe es Bislang geschafft, nur habe ich ein Problem beim Erstellen der Controls.

    Für Panel1 wird kein PanelL Erstellt, für Panel2 jedoch schon.
    Warum macht er die Controls nicht auch für Panel1?
    Bzw. wie behebe ich dies.

    VB.NET-Quellcode

    1. For i As Integer = 1 To 2 Step 1
    2. If FlowLayoutPanel1.Controls.Count = 2 Then
    3. Exit For
    4. Else
    5. With Panel
    6. .Name = i & "_Panel"
    7. .Width = 379
    8. .Height = 179
    9. .BackColor = Color.White
    10. End With
    11. FlowLayoutPanel1.Controls.Add(Panel)
    12. Panel = New Panel
    13. With PanelL
    14. .Name = i & "_PanelL"
    15. .Dock = DockStyle.Top
    16. .BackColor = Color.Blue
    17. .Height = 24
    18. End With
    19. Panel.Controls.Add(PanelL)
    20. PanelL = New Panel
    21. End If


    Wenn ich den Button (Der den Code oben Durchführt) nochmal Klicke werden die Elemente Richtig Dargestellt...
    Danke im Voraus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xX-Nick-Xx“ ()

    @xX-Nick-Xx Was ganz genau macht Zeile 23?
    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!
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Initialisiert eine neue Instanz der Panel-Klasse (Wurde auf mehreren Seiten gesagt das dass rein muss)

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

    xX-Nick-Xx schrieb:

    Initialisiert eine neue Instanz
    Das mag sein, doch woher kommt die Instanz, die Du ab Zeile 16 befüllst?
    Warum erstellst Du in Zeile 14 ebenfalls eine zweite Instanz Panel?
    Die ist doch vorher bereits in Ordnung???
    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!