Autosize-Form mit TabControl
Ich habe eine Windows Form mit einer Reihe von Steuerelementen und es funktioniert Prima. Alle Steuerelemente befinden sich in einem TableLayoutPanel
die autosizes nach den Kontrollen base-Größe und die Form
autosizes so das panel, so dass ich nicht wirklich haben, um über sorgen Größen in verschiedenen Plattformen und Computern, da sollte alles die Größe, nach der die aktuelle Konfiguration der Einstellungen.
Zum Beispiel, hier ist ein einfaches Beispiel, wie es aussieht.
Der relevante code ist:
//...code defining all the other Commands and .Add()'ing them to the Panel
form.Controls.Add(Panel);
form.AutoSize = true;
form.FormBorderStyle = FormBorderStyle.FixedDialog;
form.ShowDialog();
Will ich jetzt, um das gesamte panel und platzieren Sie es in einem TabControl-Steuerelement so, dass es nur ein Register unter vielen anderen. Ich Tat dies, wie folgt:
//...code defining all the other Commands and .Add()'ing them to the Panel
TabControl tabControl = new TabControl();
tabControl.Dock = DockStyle.Fill;
TabPage tabPage = new TabPage("C1");
tabPage.Controls.Add(Panel);
tabControl.TabPages.Add(tabPage);
form.Controls.Add(tabControl);
form.AutoSize = true;
form.FormBorderStyle = FormBorderStyle.FixedDialog;
form.ShowDialog();
Also im Grunde, statt der addition der Panel
zu den Form
ich hinzufügen, um die TabPage
wird Hinzugefügt, um die TabControl
wird Hinzugefügt, um die Form
. Allerdings führt dies in:
Ergebnisse http://img51.imageshack.us/img51/685/5112013112725am.jpg
Die Dokumentation besagt, dass die AutoSize
Eigenschaft für TabControl
und TabPage
ist die bloße Infrastruktur-ohne Relevanz. Die meisten der "Lösungen" die ich gefunden habe, schlage mit .Dock = DockStyles.Fill
, welches dazu beigetragen hat, dass die TabControl
füllt nun das Formular wie oben zu sehen, anstatt nur auf einer noch kleineren Teil davon. Die Form selbst bleibt jedoch unverändert.
Habe ich gedacht, der mit den Panel
's Größe und die TabControl
's Größe gleich (oder einer Funktion) es ist, aber ich habe bemerkt, dass die Size
parameter offenbar nur geändert, wenn sich die Panel
lackiert ist, da das hinzufügen von Steuerelementen ändert nicht an allen, also ich würd noch warten, bis die Panel
zu malen und dann die Größe ändern, die hört sich schlampig. Gibt es eine bessere Lösung?
UPDATE
Mit der Verankerung und Einstellung
Panel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
tabControl.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
Einfach führen:
http://img803.imageshack.us/img803/3453/5112013125710pm.jpg
Here
ist ein Beispiel für eine ähnliche Sache getan in WPF + MVVM, Unterstützung von Animationen, durch ziehen mit der Maus, Animationen, und andere sehr interessante visuelle und interaktive features.Nicht zu vergessen das problem, du bist hier (das ist der Mangel an Unabhängigkeit von der Auflösung von winforms) absolut NICHT VORHANDEN, in neueren Technologien.
Ja, ich sah, dass link und... das sieht ziemlich cool aus. Danke dafür, dass ich verbringen Sie den rest des Tages lernen die WPF. Auch... Sie sind wirklich leidenschaftlich über WPF, kann ich sagen.
InformationsquelleAutor Wasabi | 2013-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt die Größen, warum nicht nutzen Verankerung? Wenn Sie Anker der
Panel
zuTop | Left | Right | Bottom
desTabPage
/TabControl
, dann dieTabControl
zu denForm
die gleiche Weise, es ist immer nur dieForm
's Größe, die Sie brauchen, zu kümmern. Es wird diktieren die Größen aller anderen Elemente verankert.Panel
verankert, um Ihre host-Objekt standardmäßig? Der Standardwert von.Anchor = Top | Left
und ich habe nicht verändert. Wie gut, meine Idee war genau das Gegenteil, ließ sich der Inhalt des Formulars entscheiden, Ihre eigene Größe (über.Autosize
) und dann dieForm
autosizes, um seinen Inhalt. Ich will nicht sorgen zu machen über die verschiedenen möglichen Größen der Schriften und damit auch des gesamtenForm
auf verschiedenen Monitoren oder auf verschiedenen Versionen von Windows.Alles ist verankert
Top | Left
standardmäßig. Mein Vorschlag (was ich Bearbeiten, die Antwort zu formulieren, besser) war, dass Sie AnkerTop | Left | Right | Bottom
. Sperren Sie alle auf die Größe desForm
, dann nur Gedanken über die Größe desForm
von seinem Inhalt.Danke, aber seltsam, dass eigentlich alles noch schlimmer gemacht. Hinzufügen:
Panel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
tabControl.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
Nur dieTabControl
Verhalten, als wenn.Dock != Fill
, und jetzt ist es gar nicht ausfüllen. Und es ist eine echte bummer, dass es scheint nicht ein Weg, um dasTabControl
Verhalten, als schön, als eine einfacheForm
mit einemPanel
, wo ich Sie nicht haben, um sorgen über die Größe von etwas.Super, danke! Das hilft mir
InformationsquelleAutor Adrian
verwenden
.AutoScaleMode = None
im designer für Ihr panel als usercontrol.In meinem Fall TabControl-TabPage-myPage es funktioniert.
InformationsquelleAutor Andrey