2017-07-26 5 views
1

graphics.MeasureStringメソッドを使用してテキストサイズを測定しています。そして測定されたテキストサイズに基づいて、私はgraphics.MeasureStringを使って文字列を描画しました。しかし、私はStringFormatを使って文字列を測定し描画していました。しかし、 "left"のようなテキストでは、テキストクリッピングの問題が見つかりました。graphics.DrawStringメソッドを使用して描画するとテキストがクリップされる

以下のコードスニペットを見つけてください、

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); 

のスクリーンショットの下で描きながら、テキストクリッピングを見つけてください

enter image description here

あなたは、この問題を解決する方法を提案してくださいことはできますか?

+1

あなたの描画スペースは十分ですか?あなたのe参照はどこにありますか? – SkryptX

+0

これは本当に変です。実際に大きい、複数矩形を使用しない限り、フラグは不要なので注意してください。または、幅に1を加えることができます。これは必要なすべてのものに見えます。 – TaW

答えて

0

以下を試してください。コードからStringFormatを削除しました。できます。

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

私はStringFormat列挙型を使用するためのOPの要求どおりの答えを変更しました。

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

未定義の変数 'format'があるとき、これはどのように動作するでしょうか? – SkryptX

+0

@SkryptX申し訳ありませんが、私はそれを削除することを忘れないでください。私は答えを変更しました –

+0

こんにちは@BalagurunathanMarimuthu、私は許可したり、ラップテキストを無視するいくつかのプロパティを公開することで、私のコントロールで上記のコードを使用している。折り返しテキストを無効にすると、次の行に折り返すべきではありません。だから私は、StringFormat形式=新しいStringFormat(StringFormatFlags.NoWrap)私の要件を達成するために使用する必要があります。だから、stringFormatを削除せずにこれを解決する方法はありますか? – Jagadeesan

関連する問題