2017-07-26 101 views
1

我正在使用graphics.MeasureString方法來測量文本大小。並根據測量的文字大小,我是使用graphics.MeasureString繪製字符串。但是,我使用StringFormat來測量和繪製字符串。但是我在一些文本中發現了文本裁剪問題,如「左」。當使用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

您的繪圖空間夠大嗎?你在哪裏參考? – 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枚舉。

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

Hi @BalagurunathanMarimuthu,我在我的控件中使用了上面的代碼,因爲我公開了一些屬性來允許或忽略換行文本。如果我禁用包裝文本,文本不應該包裝到下一行。所以我必須使用StringFormat format = new StringFormat(StringFormatFlags.NoWrap)來達到我的要求。所以任何可能的方式來解決這個問題,而不刪除stringFormat? – Jagadeesan