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