So steuern Sie die Docking-Reihenfolge in WinForms


78

Wie der Titel schon sagt, suche ich nach einer Möglichkeit, die Reihenfolge zu steuern, in der die Elemente oben in meinem Steuerelement andocken.

Ich habe mit dem Windows Form Designer gespielt und ich kann nicht finden, was das RightClick->Order->SendToFrontmacht, denn genau das möchte ich tun . Wenn ich meine Inhalte zu meinem Steuerelement hinzufüge, befindet sich der neueste Inhalt immer oben, und ich möchte, dass der neuere Inhalt unten und der älteste Inhalt unten angezeigt wird oben.

Zusammenfassung: Gibt es in WinForms (C #) eine einfache Möglichkeit, die Reihenfolge zu steuern, in der Dinge an den Seiten der Steuerelemente andocken?

Bearbeiten: Ich muss dies anhand des dahinter stehenden Codes tun, wenn ich meine Steuerelemente hinzufüge. Ich kann keine Funktionen des WinForms-Designers verwenden, aber ich versuche, den WinForms-DesignerSendToBackund dieSendToFrontFunktionen nachzuahmen


Vielen Dank; Ich musste das Andocken programmgesteuert steuern und wusste nicht einmal, dass ihre Reihenfolge die Andocksteuerung kontrollierte.
Eagle-Eye

Antworten:


78

Verwenden Sie diese Methoden:

myControl.SendToBack();
myControl.BringToFront();

2
Ich suchte nach control.SendToFront()See, das war jetzt einfach. Vielen Dank!
Caesay

10
@ Tommy: Programmieren Sie normalerweise hinter Ihrem Computer? :)
Ashley Tate

6
Klicken Sie im rechten Fenster des Entwurfs mit der rechten Maustaste. Wählen Sie sendToBack und klicken Sie erneut mit der rechten Maustaste: BringToFont
Grey Wolf

Diese Methode gilt auch für das Hinzufügen von Docking-Steuerelementen im Formular-Designer. Mit dem Kontextmenü können Sie nach hinten senden, dann nach vorne bringen und dann andocken. Dies ist das letzte Steuerelement in der Andockkette.
Anders Lindén

141

Gehen Sie zu Ansicht → Andere Fenster → Dokumentumriss.

Ziehen Sie in diesem Fenster die Steuerelemente so, dass das Andocken so ist, wie Sie es möchten.


Ich habe mich gefragt, mit welchen Worten ich genau dieses Fenster beschreiben könnte. Irgendwann bei Google. Danke!
Coops

12
Ich denke, das sollte die Antwort sein
Xinchao

1
Dies funktioniert nicht, wenn Steuerelemente dynamisch hinzugefügt werden.
Wayne

Lösen Sie mein Problem einfach zur Entwurfszeit.
Hao Nguyen

1
8 Jahre später ... beste Antwort
Soulshined

12

Wie Sie sagten, ist das neueste Steuerelement, das der Steuerelementauflistung hinzugefügt wurde, das oberste. Wenn Sie ein neueres Steuerelement benötigen, das unten hinzugefügt werden soll, empfehle ich, eine Liste von Steuerelementen zu erstellen, die Steuerelemente zur Liste hinzuzufügen, die Liste umzukehren und die Liste zur Steuerelementauflistung hinzuzufügen.

List<Control> controls = new List<Control();
controls.Add(new myFirstControl());
controls.Add(new mySecondControl());
controls.Reverse();
this.Controls.AddRange(controls.ToArray());

6

Ein Steuerelement verfügt über zwei Methoden, um das zu erreichen, wonach Sie suchen: BringToFrontund SendToBack.


4

Die Reihenfolge, in der die Steuerelemente zur Controls-Sammlung hinzugefügt werden, bestimmt die Docking-Reihenfolge.


Ich muss die
Andockreihenfolge

2
Dann gehen Sie für die ControlCollection.SetChildIndex(control, index)Methode.
Oliver Hanappi

@Oliver Hanappi: Ist das im Designer möglich? Ohne Code?
user2366975

Sie sollten in der Lage sein, Steuerelemente im Dokumentumrissfenster ( blogs.msdn.com/b/zainnab/archive/2010/11/30/… ) neu zu ordnen
Oliver Hanappi

3

(Um eine andere Option anzuzeigen): In Visual Studio 2012 (und höher):

  1. Wählen Sie das Steuerelement aus, das Sie nach vorne (oder hinten) verschieben möchten.
  2. Klicken Sie auf die unten markierten Schaltflächen (Nach vorne bringen / Nach hinten senden). Geben Sie hier die Bildbeschreibung ein

Dies gibt Ihnen die Möglichkeit, die Steuerelemente in die gewünschte Reihenfolge zu bringen.


2

Beachten Sie, dass es bei programmgesteuerter Ausführung einen sehr einfachen Weg gibt, dies zu erreichen, nämlich:

containerPanel.Controls.SetChildIndex(Element, 0); //sends element to the bottom of the list

-3

Verwenden Sie das FlowLayoutPanel, es macht genau das, was Sie wollen.


1
Dieser Beitrag beantwortet die Frage nicht und diese Frage ist 6 Jahre alt und enthält bereits relevante Antworten.
Caesay
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.