2012-12-12 8 views
6

Szukam sposobu na umieszczenie tekstu na etykiecie w takiej skali, aby zmieścił się w całym kontenerze nadrzędnym. Jedyny sposób, jaki mogę wymyślić, to uzyskać rozmiar kontenera w oknie ponownie rozmiar, a następnie odpowiednio zwiększyć lub zmniejszyć rozmiar czcionki, ale to ograniczyłoby jego możliwości.W jaki sposób sprawić, aby tekst etykiety był skalowalny w aplikacji WinForm?

Zastanawiasz się, czy jest lepszy sposób na zrobienie tego, co może działać bardziej jak własność kotwicy w aplikacji WinForm.

Odpowiedz

4

Wiedziałem, że odpowiedź jest ukryta gdzieś w graficznym obiekcie i zdarzeniu malarskim, zabawa z tymi dwoma słowami kluczowymi rozwiązała mój problem. Oto rozwiązanie, które zadziałało w moim konkretnym przypadku.

Ja po prostu zmieniając rozmiar czcionki w przypadku farb do mojej wytwórni następująco:

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; 
} 

Gdzie jako funkcja NewFontSize wygląda następująco:

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; 
} 

Ja również znaleźć ten artykuł był pomocny http://www.switchonthecode.com/tutorials/csharp-tutorial-font-scaling

+0

Działa bardzo dobrze! Dzięki. – nozzleman

+1

Co to jest parentContainer ??? Czy możesz wysłać adres URL z pełnym kodem? Dzięki! – Xarialon

Powiązane problemy