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

Caesay
quelle
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();
serhio
quelle
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.

Stormenet
quelle
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());
Alexandre Pepin
quelle
6

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

Gerrie Schenck
quelle
4

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

Oliver Hanappi
quelle
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.

Arthur Zennig
quelle
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
Jack
quelle
-3

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

jhersey29
quelle
1
Dieser Beitrag beantwortet die Frage nicht und diese Frage ist 6 Jahre alt und enthält bereits relevante Antworten.
Caesay