Vraag : Hoe kan ik Graphics.MeasureString om de doopvont stileren te overwegen dwingen?

Ik zet een vervanging MessageDialog om die ik een tijdje geleden heb geschreven om volledig in plaats van het gebruiken van API worden beheerd verzoek sommige van zijn functies.  Deze dialoog kan een belangrijkste rubriek en een ondertitel of detailstandpunt hebben, en het past automatisch zijn doopvont aan die op OS in gebruik dependiing (Segoe UI voor Uitzicht en 7, Tahoma voor XP).  Van is er een subrubriek dan de rubriek in vette letters wordt teruggegeven, anders in normale style.

om dialoog I gebruik Graphics.MeasureString correct te rangschikken en in de doopvont voor vergelijking over te gaan, negeert het gebruiken van teruggekeerde SizeF om de grootte van de vereiste etiketten en zo de grootte van dialog.

However te berekenen, wanneer ik een gewaagde doopvont tot MeasureString de teruggekeerde waarde overga de gewaagde stijl en keert een kleinere waarde terug dan eigenlijk nodig is die veroorzaakt typisch dat het laatste woord in de rubriek worden verworpen (vermoedelijk is het buiten het berekende gebied).  De teruggekeerde grootte is altijd correct voor de nietgewaagde versie van de tekst provided.

How kan ik de correcte grootte veroorzaken om zijn teruggekeerd toestaand voor het verschil in grootte die de gewaagde doopvont vereist?  Merk op dat ik de overbelasting heb geprobeerd die een stringformatparameter goedkeurt en zij maken geen verschil aan result.

Chirs Bray
uit
" codeBody "
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
" notpretty "
            
SizeF headingSize;
            SizeF subHeadingSize;

            // het koordgrootte van de Maatregel
            // de grootte van de Rubriek 
            headingSize = MeasureString (rubriek, this.headingLabel.Width, headingLabel.Font);

            this.headingLabel.Size = headingSize.ToSize ();

            // Ondertitel (de grootte zal nul als singleMessage zijn)
            subHeadingSize = MeasureString (ondertitel, this.subHeadingLabel.Width, subHeadingLabel.Font);
 
       


privé Grootte MeasureString (koordstreptokok, int. maxWidth, de doopvont van de Doopvont)
        {
            het gebruiken (Grafiek g = this.CreateGraphics ())
            {
                SizeF strRectSizeF = g.MeasureString (streptokok, doopvont, maxWidth);
                g.Dispose ();

                terugkeer nieuwe Grootte ((int.) Math.Ceiling (strRectSizeF.Width), (int.) Math.Ceiling (strRectSizeF.Height));
            }
        }

Antwoord : Hoe kan ik Graphics.MeasureString om de doopvont stileren te overwegen dwingen?


de code die voor me voor auto-rangschikt werkte is… ik toevoegde hieronder een controle van het Etiket met AutoSize = vals met één of andere tekst met doopvont Arial 16 regelmatig met grens = fixedsingle. Dan in een knoop klik manager ik de onderstaande code…. hadtoen de knoop klikte

twee nota te nemen van dingen: ik gebruikte label1.CreateGraphics () en label1.ClientSize (als het boete met Grootte werkt, toen beter om grootte) te gebruiken
Deze steekproef is van => http://msdn.microsoft.com/en-us/library/system.windows.forms.control.creategraphics.aspx
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
privé nietige button1_Click (objecten afzender, EventArgs e)
        {
            // leidt tot een voorwerp van de Grafiek voor de Controle.
            Grafiek g = label1.CreateGraphics ();

            Doopvont N-F = nieuwe Doopvont (label1.Font, FontStyle.Bold);

            // krijgt de Grootte nodig om de geformatteerde Tekst aan te passen.
            De grootte preferredSize = g.MeasureString (
               label1.Text, N-F) .ToSize ();

            label1.Font = N-F;
                        
            label1.ClientSize = nieuwe Grootte (preferredSize.Width, preferredSize.Height); // u wat het opvullen ruimte aan de breedte en de hoogte kon hier toevoegen

            Omhoog Schoon // het voorwerp van de Grafiek.
            g.Dispose ();
        }
Andere oplossingen  
 
programming4us programming4us