Entwickler-Ecke
WinForms - Positionierungsproblem mit TableLayoutPanel
Wanginator - Sa 19.01.08 12:59
Titel: Positionierungsproblem mit TableLayoutPanel
Hallo, ich habe folgendes Problem und hoffe ihr könnt mir dabei helfen:
Wenn die Fenstergröße eines WinForms C#-Programm vergrößert oder verkleinert wird, bleiben die Steuerelemente an der vordefinierten Stelle (Left, Top) stehen. Damit die Steuerelemente sich der Fenstergröße anpassen, benutze ich ein TableLayoutPanel und die Dock und Anchor-Eigenschaften der Steuerelemente. Aber es gibt noch ein kleines Problem, was sich am folgenden Beispiel erklären lässt:
Man habe ein 3x3 TableLayout (Spalten=20%,60%,20% und Zeilen=20%,60%,20%) und in der mittleren Zelle ein Button. Nun soll dieser Button sich dynamisch mit der Zellgröße anpassen, also setze man Dock=Fill oder Anchor=Top,Bottom,Left,Right. Soweit so gut. Zieht man das Fenster aber zu groß (oder maximiert es), so wird der Button auch dementsprechend groß. Also will man den Button in der Maximalgröße beschränken, mit MaximumSize=.... Das Problem ist nun, dass wenn die maximale Größe erreicht wird, der Button nun in der linken oberen Ecke der Zelle bleibt. Wie schafft man es nun den Button auch zentriert in der Zelle zu platzieren?
Das einzige, was mir einfällt wäre die Form.Resize Event zu behandeln und alle Steuerlemente ihre Größe und Position neu berechnen zu lassen, was mir leider zu umständlich ist.
Mitmischer 1703 - Sa 19.01.08 13:17
Ich würde einfach mal mit den Anchorseigenschaften herumprobieren. :nixweiss:
Christian S. - Sa 19.01.08 15:55
Hallo!
Du kannst im Resize-Event des tableLayoutPanels sowas machen:
Delphi-Prism-Quelltext
1: 2: 3:
| var widthMargin := Integer((0.01 * tableLayoutPanel1.ColumnStyles[1].Width * tableLayoutPanel1.Width - button1.Width) / 2); var heightMargin := Integer((0.01 * tableLayoutPanel1.RowStyles[1].Height * tableLayoutPanel1.Height - button1.Height) / 2); button1.Margin := new Padding(widthMargin, heightMargin, widthMargin, heightMargin); |
Du musst allerdings noch gucken, dass das erst greift, wenn der Button kleiner als die Zelle ist. Sonst schiebst Du ihn nämlich zusammen ;-)
Grüße
Christian
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!