Questione : Come posso forzare Graphics.MeasureString per considerare lo stile?

Sto convertendo un rimontaggio che di MessageDialog ho scritto qualche tempo fa completamente per essere diretto invece di usando le richieste di api per alcune delle relative funzioni.  Questo dialogo può avere un'intestazione principale e una vista del particolare o di sottotitolo e registra automaticamente la relativa fonte che dependiing sull'OS in uso (Segoe UI per Vista e 7, Tahoma per XP).  Di ci è un'intestazione secondaria allora che l'intestazione è resa in GRASSETTO, altrimenti in style.

per graduare correttamente il dialogo secondo la misura utilizzo Graphics.MeasureString e passo nella fonte per il confronto, using il SizeF restituito per calcolare il formato delle etichette richieste e così il formato del dialog.

However, quando passo ad una fonte GRASSETTO a MeasureString il valore restituito ignora lo stile GRASSETTO e restituisce un valore più poco elevato realmente necessario che induce tipicamente l'ultima parola nell'intestazione ad essere scartato (presumibilmente è parte esterna la zona calcolata).  Il formato restituito è sempre corretto per la versione non-GRASSETTO del testo provided.

How può io induce il formato corretto ad essere tenere conto restituito la differenza nel formato che la fonte GRASSETTO richiede?  Si noti che ho provato i sovraccarichi che accettano un parametro dello stringformat e non fanno differenza al result.

Chirs Bray
class= > " libero " del
> " del codeSnippet " del class= del
class= " lineNumbers " del
class= del
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:
class= " del id= " codeSnippet754129 del
-------------------------------
            
SizeF headingSize;
            SizeF subHeadingSize;

            Formati della stringa di misura di //
            // che dirige formato 
            headingSize = MeasureString (intestazione, this.headingLabel.Width, headingLabel.Font);

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

            Sottotitolo di // (formato sarà zero se singleMessage)
            subHeadingSize = MeasureString (sottotitolo, this.subHeadingLabel.Width, subHeadingLabel.Font);
 
------------------------------------------------------------       


formato riservato MeasureString (streptococco della stringa, maxWidth di int, fonte della fonte)
        {
            usando (grafici g = this.CreateGraphics ())
            {
                strRectSizeF di SizeF = g.MeasureString (streptococco, fonte, maxWidth);
                g.Dispose ();

                nuovo formato di ritorno ((int) Math.Ceiling (strRectSizeF.Width), (int) Math.Ceiling (strRectSizeF.Height));
            }
        }
class= del

Risposta : Come posso forzare Graphics.MeasureString per considerare lo stile?


il codice che ha funzionato per me per l'auto-incollatura è sotto… io ha aggiunto un controllo dell'etichetta con AutoSize = falso con un certo testo con il regular di Arial 16 della fonte con il bordo = il fixedsingle. Allora in un alimentatore di scatto del tasto ho avuto il codice sotto….quando il tasto si è scattato

due cose alla nota: ho usato label1.CreateGraphics () e label1.ClientSize (se stia funzionando benissimo con il formato, quindi migliore usare formato)
Questo campione proviene da => 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:
vuoto riservato button1_Click (mittente dell'oggetto, EventArgs e)
        {
            // genera grafici obietta per il controllo.
            Grafici g = label1.CreateGraphics ();

            Fonte N-F = nuova fonte (label1.Font, FontStyle.Bold);

            // ottiene il formato stato necessario per accomodare il testo formattato.
            Il formato preferredSize = g.MeasureString (
               label1.Text, N-F) .ToSize ();

            label1.Font = N-F;
                        
            label1.ClientSize = nuovo formato (preferredSize.Width, preferredSize.Height); // potreste aggiungere un certo spazio del riempimento alla larghezza ed all'altezza qui

            // pulisce l'oggetto dei grafici.
            g.Dispose ();
        }
Altre soluzioni  
 
programming4us programming4us