Controls automatisch an Formgrösse anpassen



  • Ich möchte je nach aktueller Darstellung der Form (normal/maximized) die Schriftgrösse und
    die Location anpassen.

    Hier einmal der erste funktionierende Versuch:

    private void form1_Loed(object sender, EventArgs e)
     {
          this.Height = 300;
          this.Width  = 350;
          this.FontHeight = 10;
          label1.Text   = "Textbeispiel";
          textBox1.Text = "Hallo";
     }
    
     private void form1_SizeChanged(object sender, EventArgs e)
     {
          Point point  = new Point();
    
       // Controls an aktuelle Grösse der Form anpassen
          if (Size.Height > 300)  // Form maximized
          {
              Font font = new Font("Microsoft San Serif", 16);
              label1.Font   = font;
              textBox1.Font = font;
              point.X = 240;
              point.Y = 35;
              textBox1.Location = point;
          }
          else                    // Form normal
          {
              Font font = new Font("Microsoft San Serif", 10);
              label1.Font    = font;
              textBox1.Font  = font;
              point.X = 120;
              point.Y = 35;
              textBox1.Location = point;
          }
     }
    

    Frage: Muss ich das so einzeln für alle Controls der Form machen oder kann man
    das kürzer realisieren?



  • für alle controls...

    oder verwende ne "viewbox" die kenne ich aus WPF , weiß nich ob es da für forms auch gibt..



  • Was die Position der Controls angeht, kannst du doch Control.Anchor entsprechend setzen. Dann bleiben die Controls wo sie sind und vergrößern sich, je nach Einstellung der Anchor gleich mit. Einzig die Schriftgröße musst du händisch setzen. Und auch das sollte sich über Form.Controls einfach realisieren lassen.





  • Anchor ist so nicht geeignet. Mit grösserer Schrift müsssen die TextBoxes horizontal verschoben werden,
    da die linksstehenden Labels unterschiedlich breit sind.

    Neuer Ansatz:
    - Die Controls in ein Panel packen
    - Das Panel bei form_SizeChanged (maximized/normal) auf gewünschte Grösse setzen
    - Die Controls bei panel_SizeChanged auflisten
    - Die Auflistung mit foreach abarbeiten, hier Font.Height und Location skaliert neu festlegen

    Was mir dazu noch fehlt, ist die Liste der Controls und die foreach-Schleife mit ggfs. rekursiver Funktion (?).

    **edit: Aufgabe gelöst mit:
    **

    ControlCollection control = new ControlCollection(this);
       foreach (Control c in Controls)
       {
           ......
       }
    

    Danke ür eure Hinweise.


Anmelden zum Antworten