Autor Beitrag
Wanginator
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Sa 19.01.08 12:59 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Sa 19.01.08 13:17 
Ich würde einfach mal mit den Anchorseigenschaften herumprobieren. :nixweiss:

_________________
Die Lösung ist nicht siebzehn.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 19.01.08 15:55 
Hallo!

Du kannst im Resize-Event des tableLayoutPanels sowas machen:

ausblenden 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".