Frage : Wie kann ich Graphics.MeasureString zwingen, um die Gussart zu betrachten?

Ich wandele einen MessageDialog Wiedereinbau um, den ich vor einiger Zeit schrieb, völlig gehandhabt zu werden, anstatt, API-Anrufe für einige seiner Funktionen zu verwenden.  Dieser Dialog kann einen Hauptpunkt und eine Untertitel- oder Detailansicht haben, und er justiert automatisch seinen Guss, der auf dem gebräuchlichen OS dependiing ist (Segoe UI für Vista und 7, Tahoma für XP).  Von gibt es eine Vorüberschrift, dann, welches die Überschrift in fettem übertragen wird, in normalem style.

, zwecks den Dialog andernfalls richtig zu sortieren verwende ich Graphics.MeasureString und überschreite in den Guss für Vergleich, using das zurückgebrachte SizeF, um die Größe der Aufkleber zu berechnen, die erfordert werden und folglich ignoriert die Größe des dialog.

However, wenn ich einen fetten Guss zu MeasureString den zurückgebrachten Wert führe, die fette Art und bringt einen kleineren Wert zurück, als wirklich erforderlich, der das gewöhnlich letzte Wort in der Überschrift veranlaßt ist weggeworfen zu werden (vermutlich, sie ist Außenseite der berechnete Bereich).  Die Größe, die zurückgebracht wird, ist immer korrekt für die nicht-fette Version des Textes provided.

How kann ich veranlassen die korrekte Größe, zurückgebrachtes den Unterschied an Größe zulassen zu sein, den der fette Guss erfordert?  Merken, dass ich die Überlastungen versucht habe, die einen stringformat Parameter annehmen und sie unterscheiden kein zum result.

Chirs Bray
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:
-------------------------------
            
SizeF headingSize;
            SizeF subHeadingSize;

            //-Maßschnurgrößen
            //, das Größe vorangeht 
            headingSize = MeasureString (Überschrift, this.headingLabel.Width, headingLabel.Font);

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

            //-Untertitel (Größe ist null, wenn singleMessage)
            subHeadingSize = MeasureString (Untertitel, this.subHeadingLabel.Width, subHeadingLabel.Font);
 
------------------------------------------------------------       


private Größe MeasureString (Schnurstr, int maxWidth, Gussguß)
        {
            Anwendung (Grafiken g = this.CreateGraphics ())
            {
                SizeF strRectSizeF = g.MeasureString (str, Guss, maxWidth);
                g.Dispose ();

                neue Rückholgröße ((int) Math.Ceiling (strRectSizeF.Width), (int) Math.Ceiling (strRectSizeF.Height));
            }
        }

Antwort : Wie kann ich Graphics.MeasureString zwingen, um die Gussart zu betrachten?


der Code, der für mich für Selbst-bearbeiten arbeitete, ist unter… mir hinzufügte eine Aufklebersteuerung mit AutoSize = falsch mit etwas Text mit Guss Arial 16 Regular mit Rand = fixedsingle. Dann in einer Knopfklickenzufuhr hatte ich den below Code….als Knopf klickte

zwei Sachen zur Anmerkung: ich verwendete label1.CreateGraphics () und label1.ClientSize (wenn es mit Größe adaequat ist, dann besser, Größe zu verwenden)
Diese Probe ist vom => 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:
private Lücke button1_Click (Gegenstandabsender, EventArgs e)
        {
            // verursachen Grafiken einwenden zur Steuerung.
            Grafiken g = label1.CreateGraphics ();

            Guss N-Düngung = neuer Guss (label1.Font, FontStyle.Bold);

            // erhalten die Größe benötigt, um den formatierten Text unterzubringen.
            Größe preferredSize = g.MeasureString (
               label1.Text, N-Düngung) .ToSize ();

            label1.Font = N-Düngung;
                        
            label1.ClientSize = neue Größe (preferredSize.Width, preferredSize.Height); // konnten Sie etwas Auffüllenraum der Breite und der Höhe hier hinzufügen

            // aufräumen den Grafikgegenstand n.
            g.Dispose ();
        }
Weitere Lösungen  
 
programming4us programming4us