2017-07-26 1 views
1

J'utilise la méthode graphics.MeasureString pour mesurer la taille du texte. Et en fonction de la taille du texte mesurée, j'étais le dessiner la chaîne en utilisant le graphics.MeasureString. Mais en ce que j'utilisais le StringFormat pour mesurer et dessiner la chaîne. Mais j'ai trouvé le problème d'écrêtage dans un texte comme "left".Texte se faisant écrêter lors du dessin à l'aide de la méthode graphics.DrawString

S'il vous plaît trouver l'extrait de code ci-dessous,

string text = "Left"; 
Font font = new System.Drawing.Font("Segoe UI Semibold", 9F); 
StringFormat format = new StringFormat(StringFormatFlags.NoWrap); 
SizeF size = e.Graphics.MeasureString(text, font, 100, format); 
e.Graphics.DrawString(text, font, new SolidBrush(Color.Black), new RectangleF(10, 10, size.Width, size.Height), format); 

S'il vous plaît trouvez l'extrait de texte tout en tirant en dessous de capture d'écran,

enter image description here

Pouvez-vous s'il vous plaît suggérer comment résoudre ce problème?

+1

Votre espace de dessin est-il assez grand? Où votre e référence? – SkryptX

+0

C'est bizarre en effet. Notez que l'indicateur n'est pas nécessaire, sauf si vous utilisez réellement un grand rectangle multiligne, vous pouvez donc l'ignorer. Ou vous pouvez ajouter 1 à la largeur, ce qui semble tout ce dont il a besoin!?! – TaW

Répondre

0

Essayez les solutions suivantes. J'ai enlevé le StringFormat du code. Ça marche.

string text = "Left"; 
Font font = new Font("Segoe UI Semibold", 9F); 
//StringFormat format = new StringFormat(StringFormatFlags.NoWrap); 
SizeF size = e.Graphics.MeasureString(text, font, 100); 
e.Graphics.DrawString(text, font, new SolidBrush(Color.Black), new RectangleF(10, 10, size.Width, size.Height)); 

Edit1

J'ai modifié la réponse selon la demande de OP à utiliser StringFormat ENUM.

string text = "Left"; 
Font font = new Font("Segoe UI Semibold", 9F); 
StringFormat format = new StringFormat(StringFormatFlags.NoWrap); 
SizeF size = e.Graphics.MeasureString(text, font, 100, format); 
e.Graphics.DrawString(text, font, new SolidBrush(Color.Black), new RectangleF(10, 10, size.Width + 5, size.Height), format); 
+0

Comment cela devrait-il fonctionner même quand vous avez une variable indéfinie 'format'? – SkryptX

+0

@SkryptX désolé, j'ai oublié de l'enlever. J'ai modifié la réponse –

+0

Salut @BalagurunathanMarimuthu, j'ai utilisé le code ci-dessus dans mon contrôle, en ce que j'ai exposé une certaine propriété pour permettre ou ignorer le texte d'emballage. Si je désactive le texte d'enveloppe, le texte ne doit pas être enveloppé dans la ligne suivante. Je dois donc utiliser le format StringFormat = new StringFormat (StringFormatFlags.NoWrap) pour répondre à mes besoins. Donc, un moyen possible de résoudre cela sans supprimer le stringFormat? – Jagadeesan