2012-12-12 17 views
6

Ich suche nach einer Möglichkeit, Text in einem Etikett skalierbar zu machen, damit es in den gesamten übergeordneten Container passt. Die eine Möglichkeit, die ich mir vorstellen kann, ist, die Containergröße auf die Größe des Fensters zu bringen und dann die Schriftgröße entsprechend zu erhöhen oder zu verringern, aber das würde seine Möglichkeiten einschränken.Wie kann ich Label-Text in Winforms-Anwendung skalierbar machen

Sich fragen, ob es eine bessere Möglichkeit gibt, dies zu tun, kann das mehr wie eine Ankereigenschaft in Winforms-Anwendung funktionieren.

Antwort

4

Ich wusste, die Antwort ist irgendwo in Grafikobjekt und Paint Event versteckt, herumspielen mit diesen 2 Keywords löste mein Problem. Hier ist die Lösung, die in meinem speziellen Fall funktioniert hat.

Ich bin einfach Ändern der Schriftgröße auf Paint-Ereignis für mein Label wie folgt:

private void myLabel_Paint(object sender, PaintEventArgs e) 
{ 
    float fontSize = NewFontSize(e.Graphics, parentContainer.Bounds.Size, myLabel.Font, myLabel.Text); 
    Font f = new Font("Arial", fontSize, FontStyle.Bold); 
    myLabel.Font = f; 
} 

Wo, wie die NewFontSize Funktion wie folgt aussieht:

public static float NewFontSize(Graphics graphics, Size size, Font font, string str) 
{ 
    SizeF stringSize = graphics.MeasureString(str, font); 
    float wRatio = size.Width/stringSize.Width; 
    float hRatio = size.Height/stringSize.Height; 
    float ratio = Math.Min(hRatio, wRatio); 
    return font.Size * ratio; 
} 

Ich fand auch dieser Artikel hilfreich http://www.switchonthecode.com/tutorials/csharp-tutorial-font-scaling

+0

Funktioniert sehr gut! Vielen Dank. – nozzleman

+1

Was ist ParentContainer ??? Können Sie eine URL mit vollem Code senden? Vielen Dank! – Xarialon