2009-01-29 12 views
105

Ich versuche, ein Steuerelement fester Größe in einem Formular zu zentrieren.Zentrieren von Steuerelementen in einem Formular in .NET (Winforms)?

Aus Interesse, gibt es eine nicht-idiotische Art, dies zu tun? Was ich wirklich möchte, ist etwas, das der Eigenschaft text-align css analog ist.

Im Moment setze ich die Padding-Eigenschaft des umgebenden Formulars auf eine geeignete Größe und setze die Dock-Eigenschaft des zu füllenden Steuerelements.

+0

Einfache Lösung [hier] (http://stackoverflow.com/a/10786900/730701). – Adam

Antwort

217

Sie könnten dies mit der Verwendung von Anker erreichen. Oder genauer die Nichtbenutzung von ihnen.

Die Steuerelemente sind standardmäßig oben links im Formular verankert, dh wenn die Formulargröße geändert wird, bleibt der Abstand von der oberen linken Seite des Formulars konstant. Wenn Sie den Steuerungsanzeiger nach links unten ändern, behält das Steuerelement die gleiche Entfernung von der unteren und linken Seite des Formulars bei, wenn das Formular geändert wird.

Wenn Sie den Anker in einer Richtung deaktivieren, bleibt das Steuerelement bei der Größenänderung in dieser Richtung zentriert.

HINWEIS: Ausschalten über das Eigenschaftenfenster in VS2015 Verankerung kann die Eingabe keine erfordern, keine (statt Standard-Oben, Links)

+0

So könnten Sie das Steuerelement in der Mitte des Formulars platzieren (ungefähr oder genau über das Eigenschaftenfenster) oder im Form.Load-Ereignishandler die Control.Left-, Control.Top-Eigenschaften in Bezug auf Control.Size und Form festlegen. Größe. – maxwellb

+0

Großartig, ich habe nie darüber nachgedacht, alle Seiten auf Anchor-Eigenschaft zu beenden, jetzt, wenn ich die Größe verändere, bleibt die Kontrolle zentriert. !groß! – FabianSilva

+1

Wenn ich dann ein Label in ein Formular in der Mitte plaziere und seinen Anker auf None setze, warum hält es sich dann nicht in der Mitte, wenn das Formularfenster maximiert ist? – user1004959

84
myControl.Left = (this.ClientSize.Width - myControl.Width)/2 ; 
myControl.Top = (this.ClientSize.Height - myControl.Height)/2; 
+1

Ich denke, das ist die richtige Antwort, um das Steuerelement in der Mitte zu halten, auch wenn die Größe des Formulars zur Laufzeit geändert wird. – user1004959

+13

Fügen Sie den obigen Code einem System.Windows.Forms.Form SizeChanged-Ereignis und voila hinzu. – Zignd

+0

Dies zusammen mit dem SizeChanged-Ereignis des Steuerelements, das Sie zentriert behalten möchten, ist die Lösung, um Ihre Kontrolle zentriert zu halten, wenn Ihr Steuerelement seine Größe unabhängig von seinem übergeordneten Formular ändern kann. – Skyqula

1

Es handelt es Anglotzen (na ja ich nehme an, Sie heraus bekommen konnte ein Taschenrechner und berechnen), aber fügen Sie einfach das Steuerelement in das Formular ein und entfernen Sie dann die Verankerung (Anker = Keine).

+0

Könnten Sie bitte elborate? Ich kann deine Antwort nicht verstehen. –

+0

In meinem Versuch, schnell zu antworten (ich werde immer mit dem Schlag auf StackOverflow geschlagen), sagte ich, was der Benutzer splattne elterbarer gesagt hat: Deaktivieren Sie die Verankerung für die Kontrolle, die Sie zentrieren möchten. – t3rse

+1

FYI, die Formular-Layout-Symbolleiste von Visual Studio verfügt über die Schaltflächen "Horizontal zentrieren" und "Vertikal zentrieren", die die Notwendigkeit eliminieren, etwas "zu fotografieren". Nicht sicher, ob es vor VS2010 existierte, aber es ist sehr nützlich. – Dan

31

Da Sie angeben, nicht, wenn das Formular oder nicht die Größe kann, gibt es eine einfache Möglichkeit, wenn Sie nicht über die Größenänderung ist es egal (wenn Sie Pflege zu tun, gehen mit Mitch Wheats Lösung):

die Steuerung auswählen -> Format (Menüoption) -> In Fenster zentrieren -> Horizontal oder vertikal

+2

Warum ist Mitch's Lösung zur Größenanpassung besser als Verankerung im Designer? –

+1

@EdSykes es ist nicht – HDD

+0

Ja..es funktioniert. Mit Ihrem Guide: - Wählen Sie die Steuerung. Gehe zu Format -> In Formular zentrieren -> Vertikal und Horizontal auswählen. Dann gehen Sie zum Anker, heben Sie die Auswahl von Oben und Links auf (Standardkontrollanker) .. und es zentrierte sich auf dem Bildschirm..groß – Luiey

8

Ich fand eine gute Möglichkeit, dies zu tun, und es wird mit mehreren Steuerelementen arbeiten. Fügen Sie ein TableLayout mit 3 Spalten hinzu. Machen Sie die mittlere Spalte eine absolute Größe (wie viel Platz Sie auch brauchen). Setzen Sie die zwei äußeren Spalten auf 100%. Fügen Sie der mittleren Spalte ein Panel hinzu, fügen Sie alle benötigten Steuerelemente hinzu und platzieren Sie sie an der gewünschten Position. Dieses mittlere Feld bleibt jetzt in Ihrer Form zentriert.

+0

In Ordnung, aber irgendwann setzen Sie die mittlere Spalte auf die automatische Größe ist besser geeignet. – CoolMagic

+0

Ein Einzelzellen-TableLayoutPanel, das ein nicht angedocktes Bedienfeld enthält, funktioniert ebenfalls einwandfrei. – Larry

2

Sie können das Steuerelement, das Sie zentrieren möchten, in ein Panel einfügen und den linken und rechten Füllwert auf etwas Größeres als den Standardwert setzen. Solange sie gleich sind und Ihr Steuerelement an den Seiten des Panels verankert ist, wird es in diesem Panel zentriert angezeigt. Dann können Sie das Container-Panel nach Bedarf an seinem übergeordneten Element verankern.

+0

Für mehrere Steuerelemente: Legen Sie die Steuerelemente auf ein Panel und entfernen Sie dann die Panel-Anker. –

-2

Oberhalb der linken und oberen Eigenschaft, wenn das übergeordnete Fenster maximiert ist.

1

Um Knopf im Panel o in einem anderen Behälter Zentrieren Sie diesen Schritt folgen:

  1. zur Entwurfszeit die Position
  2. Zum Eigenschaften Anchor der Taste und stellen diesen Wert als das Bild folgt eingestellt

enter image description here

0

Sie können alle Ihre Kontrollen Panel setzen und dann ein schreiben Code, um das Fenster 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; 
0

Darüber hinaus wollen, wenn Sie es in der Mitte eines anderen weiteren Steuer auszurichten:

//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; 
Verwandte Themen