Priorität der Überlappung von Controls ändern

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Priorität der Überlappung von Controls ändern

    Hallo,

    erstellt man mehrere Controls (z.B. kleine quadratische Panels) auf einer Form und verändert deren Position während der Laufzeit, stellt man fest, dass das zuerst erstellte Control die höchste Priorität im Sinne von Überlappung hat. Egal mit welchem anderen Control sich das zuerst erzeugte überschneidet, es liegt immer oben, während das zuletzt erstellte Control gegen alle anderen Controls stets "verliert" bzw. unten liegt.

    Mich interessiert, ob man diese Reihenfolge manuell verändern kann, womöglich sogar über eine Control-Property?

    Danke!
    Codetechnisch liegt das Geheimnis in der Form.Designer.vb. Da werden in dem Abschnitt der Prozedur Private Sub InitializeComponent(), welches kommentartechnisch mit dem Formnamen beginnt, die Controls angegeben, die auftauchen sollen. Angenommen Du hast 2 Buttons, btn1 und btn2, dann steht dort:

    VB.NET-Quellcode

    1. Me.Controls.Add(Me.btn1)
    2. Me.Controls.Add(Me.btn2)

    das CE, welches weiter oben steht, wird auch als weiter oben/vorne auf dem Form gezeichnet, also vorne ist btn1, dahinter btn2. Tauscht man die Zeilen, ist es umgekehrt.
    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.

    DavidVB schrieb:

    Reihenfolge manuell verändern
    Du erstellst Deine Controls zur Laufzeit, da ist die Wortwahl manuell nicht korrekt, denn manuell impliziert Im Designer.
    Wenn Du die Reihenfolge der Controls zur Laufzeit ändern willst, gib ihnen sinnige .Name oder .Tag-Properties, hole die Controls dann aus der .Controls-Collection heraus, speichere sie zwischen und packe sie in der richtigen Reihenfolge wieder in die .Controls-Collection hinein. Feddich.
    Mach da drum herum einen Layout-Block, sonst sieht man da ggf. was an der GUI:

    VB.NET-Quellcode

    1. .SuspendLayout()
    2. ' Controls jonglieren
    3. .ResumeLayout(false)
    4. .PerformLayout()

    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!