Überlegungen zu Containern für Controls der GUI

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

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von DerSmurf.

    Überlegungen zu Containern für Controls der GUI

    Hallo ihr lieben
    Ich möchte in meinem Programm eine Form hinzufügen Diese soll folgendes enthalten.
    Buchstabenbuttons (als Ersatz für die Bildschirmtastatur, die der User nicht zu Gesicht bekommen darf).
    Ein Label, oder Textfeld in dem die Eingaben der Buttons angezeigt werden.
    Ein gebundenes DGV, welche Werte aus der DataTable gefiltert nach der Usereingabe anzeigt.
    Das ist generell vom Design und Code kein Problem.
    Aber einen Extrawunsch habe ich. Die Position der Buttons (also meiner eigener Tastatur, muss vom User auswählbar sein (oben oder unten))

    Also kann ich nicht einfach einen horizontalen SplitContainer nutzen und die Controls in beiden Splittern mit TableLayoutPanels hübsch anordnen :(

    In welches Control packe ich die Tastatur am besten damit diese codeseitig oben oder unten gedockt werden kann?
    Du meinst: Wenn das Ganze oben gedockt ist, müssen die Buttons ganz oben und darunter der Rest sein. Aber wenn das Ganze unten gedockt ist, müssen die Buttons ganz unten und darüber der Rest? In den Splitcontainer pro Teil ein Panel, dort die Controls etc. rein. Und notfalls dann eben Panel1 aus SplitContainer-Teil1 rausnehmen, Panel2 aus SplitContainer-Teil2 rausnehmen, Panel1 in SplitContainer-Teil2 rein, Panel2 in SplitContainer-Teil1 rein.
    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 Besser wäre ein TableLayoutPanel mit 3 Zeilen, 1. und 3. Zeile halten alternativ die Tastatur bzw. Höhe 0, der Rest der Controls kommt in Zeile 2,
    alle Controls jeweils in ein eigenes Panel.
    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!
    Danke für den Tipp.
    Ich versuche dies nun umzusetzen.

    Zuerst habe ich das TLP erstellt. Dieses hat 5 Zeilen
    1. Zeile absolut 5 Pixel (damit ein "Rand nach oben entsteht)
    2. Zeile Autosize (Tastatur oben)
    3. Zeile 100% (enthält erstmal einen Button um die Tastatur nach unten zu schieben)
    4. Zeile Autosize (Tastatur unten)
    5. Zeile absolut 5 pixel (für den "Rand" nach unten)

    Die Tastatur befindet sich nun auf dem Panel1 in TableLayoutPanel1.row2. Mithilfe eines Buttons möchte ich das Panel1 nach TableLayoutPanel1.row4 verschieben.
    Hierzu habe ich im Objektkatalog die Parent Property des Panels gefunden.
    Diese muss ich ja nur auf die entsprechende Row im TLP setzten.
    Aber ich finde zum TLP keine Property um eine Zeile direkt anzusprechen.
    Wie bewerkstellige ich das?

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Panel1.Parent = TableLayoutPanel1.row4
    3. End Sub


    Edit:

    VB.NET-Quellcode

    1. TableLayoutPanel1.Controls.Add(Panel1, 1, 3)

    das scheint zu funktionieren. Ist das so richtig?

    Hmm. Ich hab auch mal schnell ne Demo rangeschustert Denn ich finde keine Möglichkeit die Größe der Rows2 oder 4, also der Tastatur anzupassen, wenn die Rows auf AutoSize stehen.
    Aber die Tastaturgröße, die mir VS vorgibt gefällt mir nicht. muss ich dann doch die Zeilenhöhe per Code setzen (wenn ja, wie), oder geht das auch mit AutoSize im Designer?
    Dateien

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DerSmurf“ ()

    ich verstehs Problem nicht - deine Testanwendung geht doch, wie ich von ihr erwarten täte?
    Ich weiss jetzt nicht, welche Tastaturgrösse VS dir vorgibt - die Tastatur hast du doch gebastelt?
    Wenn die kleiner sein soll, mach sie kleiner.
    Deine Tastatur ist auf einem Panel - das musste nicht mit Dock.Fill Docken. Das Panel soll sich ja nicht der TLP-Row anpassen, sondern grad andersrum.
    Vielleicht ist Panel.AnchorStyle.left + .Right für dich das richtige.

    DerSmurf schrieb:

    das scheint zu funktionieren. Ist das so richtig?
    Wenn Du Dein eigenes Programm schreibst, musst Du doch wissen, was rauskommen soll, wie was funktionieren soll.
    Wenn es das tut, is feddich.
    GoTo Next Ptoblem.
    ====
    Machst Du

    VB.NET-Quellcode

    1. .WindowState = FormWindowState.Maximized

    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!

    ErfinderDesRades schrieb:

    ich verstehs Problem nicht - deine Testanwendung geht doch, wie ich von ihr erwarten täte?


    ErfinderDesRades schrieb:

    Deine Tastatur ist auf einem Panel - das musste nicht mit Dock.Fill Docken. Das Panel soll sich ja nicht der TLP-Row anpassen, sondern grad andersrum.


    Mit deinem zweiten Zitat ist mein Problem erkannt - und aus der Welt geschafft.
    Danke!

    Edit: und danke an @RodFromGermany für die Verbesserung!