Fråga : Hur kan jag tvinga Graphics.MeasureString för att betrakta stilsorten utformar?

Förmiddag som I konverterar ett MessageDialog utbyte som, jag skrev någon tid sedan fullständigt att klaras av, i stället för att använda API-appeller för något av dess, fungerar.  Denna dialog kan ha en huvudsaklig överskrift, och en subheading eller att specificera beskådar, och den justerar automatiskt dess stilsort som dependiing på OSet som är i bruk (Segoe UI för utsikt och 7, Tahoma för XP).  Av det finns en underöverskrift, därefter som överskriften framförs i djärvt, annorlunda i det normala style.

för att korrekt att storleksanpassa dialogen jag använder Graphics.MeasureString och passerar i stilsorten för jämförelse, using den gångna tillbaka SizeFen för att beräkna storleksanpassa av de krävda etiketterna, och thus storleksanpassa av dialog.
However, när jag passerar en djärv stilsort till MeasureString den gångna tillbaka värdera, ignorerar det djärvt utformar, och retur ett mindre värderar, än är faktiskt nödvändigt, som orsakar typisk jumbon, uttrycker i överskriften som ska kasseras (förmodligen det är yttersidan det beräknade området).  Den gångna tillbaka storleksanpassa är alltid korrekt för densätta en klocka på versionen av texten provided.

How kan mig orsaka det korrekt storleksanpassar för att vara gånget tillbaka låta för skillnaden storleksanpassar in att den djärva stilsorten kräver?  Notera att jag har försökt överbelastningarna som accepterar en stringformatparameter, och de gör ingen skillnad till result.
Chirs Bray
> för
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:
" codeBody " " notpretty class= " för ------------------------------- SizeF headingSize; SizeF subHeadingSize; // mäter stränger storleksanpassar // Heading storleksanpassar headingSize = MeasureString (överskriften, this.headingLabel.Width, headingLabel.Font); this.headingLabel.Size = headingSize.ToSize (); // Subheading (storleksanpassa ska är noll, om singleMessagen) subHeadingSize = MeasureString (subHeadingen, this.subHeadingLabel.Width, subHeadingLabel.Font); ------------------------------------------------------------ privat storleksanpassa MeasureString (stränga stren, int-maxWidth, stilsortsstilsorten), { använda (diagram G = this.CreateGraphics ()) { SizeF strRectSizeF = g.MeasureString (str, stilsort, maxWidth); g.Dispose (); återgånga nya storleksanpassar ((int) Math.Ceiling (strRectSizeF.Width), (int) Math.Ceiling (strRectSizeF.Height)); } }
" klar "

Svar : Hur kan jag tvinga Graphics.MeasureString för att betrakta stilsorten utformar?


kodifiera, som fungerade för mig för auto-att storleksanpassa, är nedanfört… I tillfogade en etikett kontrollerar med AutoSize = falskt med någon text med den stilsortsArial 16 stamgästen med gränsar = fixedsingle. Därefter i en knäppas klicka förlagehanteraren som jag hade det nedanfört att kodifiera….,när knäppas klickat,

två saker som ska noteras: jag använde label1.CreateGraphics () och label1.ClientSize (om det är den funktionsdugliga boten med storleksanpassar, då förbättrar för att använda storleksanpassar),
Detta tar prov är från => 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:
privat utan laga kraft button1_Click (anmärka avsändaren, EventArgs e),
        {
            // skapar diagram anmärker för kontrollera.
            Diagram G = label1.CreateGraphics ();

            Stilsort nf = ny stilsort (label1.Font, FontStyle.Bold);

            // får storleksanpassa behövd för att hysa den formaterade texten.
            Storleksanpassa preferredSize = g.MeasureString (
               label1.Text, nf) .ToSize ();

            label1.Font = nf;
                        
            label1.ClientSize = nytt storleksanpassar (preferredSize.Width, preferredSize.Height); // du kunde tillfoga något vaddera utrymme till bredden och höjden här

            // rena övre diagrammen anmärker.
            g.Dispose ();
        }
Andra lösningar  
 
programming4us programming4us