Dopo aver cercato su internet per un po', sono finalmente giunto ad uno script facile e veloce per gestire la cosa. Una premessa è doverosa: il C# ha un suo metodo di scaling che però non agisce direttamente sui Font. Il che significa che, oltre allo scaling del controllo, è necessario effettuare anche un ridimensionamento del font con la stessa proporzione.
E' importante disabilitare la funzionalità di autoscale nativa, che permette un adattamento solo parziale e successivamente ridimensionare ogni controllo della finestra con una determinata proporzione (ratio).
Di seguito i pochi passi necessari per il corretto funzionamento del ridimensionamento.
1. Aggiungere nelle dichiarazione delle variabili
private Size currSize;2. Aggiungere nel costruttore, dopo InitializeComponent()
this.AutoScaleMode = AutoScaleMode.None; currSize = this.Size;3. Aggiungere la seguente funzione
private void autoscale() { Font tempFont; SizeF ratio = SizeF.Empty; //calculate resizing ratio ratio = new SizeF((float)this.Width / currSize.Width, (float)this.Height / currSize.Height); //loop through all controls and scale them foreach (Control c in this.Controls) {//Get current font size, Scale object and scale font tempFont = new Font(c.Font.Name, c.Font.SizeInPoints * ratio.Width * ratio.Height); c.Scale(ratio); c.Font = tempFont; } //update current size currSize = this.Size; }4. Utilizzare la funzione precedente nell'evento SizeChanged della windows form
private void Form1_SizeChanged(object sender, EventArgs e) { autoscale(); }
Nessun commento:
Posta un commento