Wie center eine Reihe von Steuerelementen, die programmgesteuert in c#
Ich bin ziemlich neu in dieser Gemeinschaft, und ich habe diese app fügt hinzu, dass Steuerelemente programmgesteuert.
Ich möchte Mitte alle hinzugefügten Steuerelemente in der Art, wie Sie auswählen und drücken-center auf Visual Studio. Und Nein, ich möchte nicht zum Mittelpunkt jeder Seite.
Hier ist der code, den ich verwendet, um alle Steuerelemente:
private void GetAllControl(Control c, List<Control> list)
{
//gets all controls and saves them to a list
foreach (Control control in c.Controls)
{
list.Add(control);
}
}
//And then call it like this
List<Control> list = new List<Control>();
GetAllControl(PNL_custom, list);
foreach (Play_panel m in list)
{
//And here I want to insert that center code
}
Vielen Dank im Voraus,
VBTheory
- Ist dies eine WinForms-desktop-app?
- Natürlich es ist 🙂
- Es hilft Ihnen, um die Aufmerksamkeit von Menschen, die helfen können, wenn Sie ein tag, der angibt, z.B. WinForms oder WPF oder ASP.Net.
- Diese Frage ist im Zusammenhang stackoverflow.com/questions/2855435/...
- "Und Nein, ich möchte nicht zum Mittelpunkt jeder Seite." Sie wollen also-Format --> Align --> Zentren und/oder Format --> Align --> Mitten Arbeit auf der Liste der Steuerelemente?
- Nein, ich meinte select-Steuerelemente --> Format - > Center in form --> Horizontal und wählen Sie Steuerelemente --> Format - > Center in form --> Vertikal während der Laufzeit
- Ah, verstanden. Aber Mitte Sie als GRUPPE?...oder individuell?
- center Ihnen als Gruppe ist die Antwort, die ich suchte 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, wie um den Mittelpunkt der Kontrollen als GRUPPE. Es ist fast das gleiche wie vorher, außer wir berechnen, wie weit die Mitte der Masse für die Gruppe zu bewegen hat, um sich in der Mitte der übergeordneten Steuerung. Dann haben wir iterieren über alle Bedienelemente und kompensieren Ihre Standorte durch, dass viel. Diese Zentren Sie alle unter Beibehaltung Ihrer relativen Positionen zu einander:
"Und Nein, ich möchte nicht zum Mittelpunkt jeder Seite."
Du willst also die "Align" in der Liste der Steuerelemente?...in:
Format --> Align --> Zentren
Format --> Align --> Mitten
Wenn ja , dann berechnen Sie die Mitte jedes Steuerelement, und fügen Sie die X -, Y-coords, so können Sie die Berechnung eines "durchschnittlichen" - Punkt (die Mitte der Masse). Jetzt können Sie Durchlaufen die Steuerelemente und die Verwendung der Angleichung der X-oder Y-Wert, abhängig von der gewünschten Richtung. Einfach subtrahieren davon die Hälfte der Breite oder Höhe ein, und halten Sie die andere Wert.
Etwas wie:
Holen Sie sich die Breite und Höhe der control-container (entweder ein anderes Steuerelement oder die form). Die Koordinaten der Steuerelemente werden die Abstände in Pixeln, relativ zur linken oberen Ecke der Container (das ist (0,0)). So alle Sie tun müssen ist, legen Sie ein Steuerelement
x
koordinieren zu(form width - control width) /2
. Gleiches gilt für die Höhe.m.Location.X = (m.Parent.Width - m.Width) / 2
zu Mitte horizontal. ErsatzY
fürX
undHeight
fürWidth
Sie haben zentriert, sowohl vertikal als auch.Alle Steuerelemente Hinzugefügt werden, um einen container (wahrscheinlichste Form), obwohl Sie könnte leicht in ein Gruppenfeld, etc.
Auszurichten center im container Sie benötigen, um ein wenig Mathematik und positionieren Sie sich selbst 🙂
Bevor Sie Mitte der das Steuerelement in der container Sie benötigen, um zu finden die Mitte des Containers. Dies wird die Breite des Containers /2 : container-Höhe /2.
Werde ich ein einzelnes Steuerelement namens cmdButton1 zu markieren - Sie wollen die Iteration durch die Liste der Steuerelemente und tun dies, um alle von Ihnen in der Reihe.
Dann können Sie die position eines Steuerelements an diesem Mittelpunkt:
Jedoch Ihrer Kontrolle (cmdButton in meinem Beispiel) verankert ist bei (0,0) der linken oberen Ecke des Steuerelements, so dass wir brauchen, um es wieder zu verschieben und bis um die Hälfte seiner eigenen Breite und Höhe
Mehr relevant:
Also hab ich es auf diese Weise:
Wenn es mehrere Kontrollen,obige code wurde platzieren Sie alle Steuerelemente auf der jeweils anderen.
Alles was ich versuche zu tun, ist die Mitte allen Steuerelementen in einem panel, sondern lege Sie neben einander anstatt über einander.
Hier ist mein modifizierter code (FYI dies center steuert in der 1 Zeile nicht über mehrere Zeilen):