webentwicklung-frage-antwort-db.com.de

Steuerelemente in einem Formular in .NET zentrieren (Winforms)?

Ich versuche, ein Steuerelement mit fester Größe in einem Formular zu zentrieren.

Gibt es aus Interesse einen nicht-idiotischen Weg, dies zu tun? Was ich wirklich will, ist etwas Analoges zur Eigenschaft text-align css.

Im Moment stelle ich die Auffülleigenschaft des umgebenden Formulars auf eine geeignete Größe und die Dock-Eigenschaft des Steuerelements auf Ausfüllen ein.

128
user47741

Sie können dies mit Anker erreichen. Oder genauer gesagt das Nichtverwendung von ihnen.

Steuerelemente sind standardmäßig links oben im Formular verankert. Wenn also die Formulargröße geändert wird, bleibt der Abstand von der linken oberen Seite des Formulars konstant. Wenn Sie den Steuerelementanker nach links unten ändern, behält das Steuerelement bei einer Größenänderung des Formulars den gleichen Abstand vom unteren und linken Rand des Formulars bei.

Wenn Sie den Anker in eine Richtung ausschalten, bleibt das Steuerelement beim Ändern der Größe in dieser Richtung zentriert.

HINWEIS: Zum Deaktivieren der Verankerung über das Eigenschaftenfenster in VS2015 muss möglicherweise None, None (anstelle der Standardeinstellung Top, Left) eingegeben werden.

242
splattne
myControl.Left = (this.ClientSize.Width - myControl.Width) / 2 ;
myControl.Top = (this.ClientSize.Height - myControl.Height) / 2;
107
Mitch Wheat

Da Sie nicht angeben, ob die Größe des Formulars geändert werden kann oder nicht, gibt es eine einfache Möglichkeit, wenn Sie sich nicht für die Größenänderung interessieren (wenn Sie dies möchten, entscheiden Sie sich für die Mitch Wheats-Lösung):

Wählen Sie das Steuerelement -> Format (Menüoption) -> Im Fenster zentrieren -> Horizontal oder Vertikal

41
Robert MacLean

Ich habe eine großartige Möglichkeit gefunden, dies zu tun, und es wird mit mehreren Steuerelementen funktionieren. Fügen Sie ein TableLayout mit 3 Spalten hinzu. Stellen Sie die mittlere Spalte auf eine absolute Größe ein (wie viel Platz Sie auch benötigen). Setzen Sie die beiden äußeren Spalten auf 100%. Fügen Sie der mittleren Spalte ein Bedienfeld hinzu, fügen Sie die erforderlichen Steuerelemente hinzu und platzieren Sie sie an der gewünschten Stelle. Das mittlere Bedienfeld bleibt jetzt in Ihrem Formular zentriert.

8
Chad

Um Button in Panel o in einem anderen Container zu zentrieren, gehen Sie wie folgt vor:

  1. Stellen Sie zur Entwurfszeit die Position ein
  2. Gehen Sie zu Eigenschaften Anker der Schaltfläche und stellen Sie diesen Wert wie folgt ein

enter image description here

6
daniele3004

Sie können das Steuerelement, das Sie zentrieren möchten, in ein Bedienfeld einfügen und den linken und rechten Abstand auf einen Wert festlegen, der größer als der Standardwert ist. Solange sie gleich sind und Ihr Steuerelement an den Seiten des Bedienfelds verankert ist, wird es in diesem Bedienfeld zentriert angezeigt. Anschließend können Sie das Container-Panel nach Bedarf an seinem übergeordneten Element verankern.

2
Droj

sie können alle Steuerelemente in das Bedienfeld einfügen und dann einen Code eingeben, um das Bedienfeld in die Mitte des Formulars zu verschieben.

panelMain.Location = 
    new Point(ClientSize.Width / 2 - panelMain.Size.Width / 2, 
              ClientSize.Height / 2 - panelMain.Size.Height / 2);

panelMain.Anchor = AnchorStyles.None;
1
Ahad aghapour

Wenn Sie es außerdem an der Mitte eines anderen Steuerelements ausrichten möchten:

//The "ctrlParent" is the one on which you want to align "ctrlToCenter".
//"ctrlParent" can be your "form name" or any other control such as "grid name" and etc.
ctrlToCenter.Parent = ctrlParent;

ctrlToCenter.Left = (ctrlToCenter.Parent.Width - ctrlToCenter.Width) / 2;
ctrlToCenter.Top = (ctrlToCenter.Parent.Height - ctrlToCenter.Height) / 2;
0
M. Fawad Surosh

Es geht darum, einen Blick darauf zu werfen (naja, ich nehme an, Sie könnten einen Taschenrechner herausholen und rechnen), aber fügen Sie das Steuerelement einfach in das Formular ein und entfernen Sie dann alle Verankerungen (Anker = Keine).

0
t3rse