Question : Comment est-ce que je peux forcer Graphics.MeasureString pour considérer le modèle de police ?

Je convertis un remplacement de MessageDialog que j'ai écrit il y a quelque temps pour être entièrement contrôlé au lieu d'employer des appels d'api pour certaines de ses fonctions.  Ce dialogue peut avoir un titre principal et un point de vue de sous-position ou de détail, et il ajuste automatiquement sa police dependiing sur l'OS en service (Segoe UI pour Vista et 7, Tahoma pour XP).  D'il y a un titre secondaire alors que le titre est rendu en gras, autrement dans style.

afin de classer correctement le dialogue j'emploie Graphics.MeasureString et passe dans la police pour la comparaison, using le SizeF retourné pour calculer la taille des étiquettes priées et ainsi la taille du dialog.

However, quand je passe à une police "BOLD" à MeasureString la valeur retournée ignore le modèle "BOLD" et renvoie une plus petite valeur qu'est réellement nécessaire qui cause typiquement le dernier mot dans le titre d'être jeté (vraisemblablement elle est extérieur le secteur calculé).  La taille retournée est toujours correct pour la version non-"BOLD" du texte provided.

How peut moi causent la taille correcte être tenir compte retourné de la différence dans la taille que la police "BOLD" exige ?  Noter que j'ai essayé les surcharges qui acceptent un paramètre de stringformat et elles ne font aucune différence au result.

Chirs Bray
class= > " clair " de
> de " codeSnippet " de class= de
class= " lineNumbers " de
class= de
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= " de l'id= " codeSnippet754129 de
-------------------------------
            
SizeF headingSize ;
            SizeF subHeadingSize ;

            Tailles de corde de mesure de //
            // dirigeant la taille 
            headingSize = MeasureString (titre, this.headingLabel.Width, headingLabel.Font) ;

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

            Sous-position de // (la taille sera zéro si le singleMessage)
            subHeadingSize = MeasureString (sous-position, this.subHeadingLabel.Width, subHeadingLabel.Font) ;
 
------------------------------------------------------------       


taille privée MeasureString (streptocoque de corde, maxWidth d'international, police de police)
        {
            utilisation (graphiques g = this.CreateGraphics ())
            {
                strRectSizeF de SizeF = g.MeasureString (streptocoque, police, maxWidth) ;
                g.Dispose () ;

                nouvelle taille de retour ((international) Math.Ceiling (strRectSizeF.Width), (international) Math.Ceiling (strRectSizeF.Height));
            }
        }
class= de

Réponse : Comment est-ce que je peux forcer Graphics.MeasureString pour considérer le modèle de police ?


le code qui a fonctionné pour moi pour l'automatique-classement par taille est au-dessous… de moi a ajouté une commande d'étiquette avec AutoSize = faux avec un certain texte avec le militaire de carrière d'Arial 16 de police avec la frontière = le fixedsingle. Alors dans un traiteur de clic de bouton j'ai eu le code ci-dessous….quand le bouton a cliqué

deux choses à la note : j'ai employé label1.CreateGraphics () et label1.ClientSize (si cela fonctionne très bien avec la taille, puis meilleur d'employer la taille)
Cet échantillon est de => 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 :
vide privé button1_Click (expéditeur d'objet, EventArgs e)
        {
            // créent des graphiques objectent pour la commande.
            Graphiques g = label1.CreateGraphics () ;

            Police N-F = nouvelle police (label1.Font, FontStyle.Bold) ;

            // obtiennent la taille nécessaire pour adapter au texte composé.
            La taille preferredSize = g.MeasureString (
               label1.Text, N-F) .ToSize () ;

            label1.Font = N-F ;
                        
            label1.ClientSize = nouvelle taille (preferredSize.Width, preferredSize.Height) ; // vous pourriez ajouter un certain espace de remplissage à la largeur et à la taille ici

            // nettoient l'objet de graphiques.
            g.Dispose () ;
        }
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us