2017-07-26 29 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