C# 使用graphics.DrawString方法绘制时剪切的文本
我正在使用graphics.MeasureString方法测量文本大小。根据测量的文本大小,我使用graphics.MeasureString绘制字符串。但在这方面,我使用StringFormat来测量和绘制字符串。但是我在一些文本中发现了文本剪辑问题,比如“left” 请查找下面的代码片段C# 使用graphics.DrawString方法绘制时剪切的文本,c#,winforms,graphics,drawing,C#,Winforms,Graphics,Drawing,我正在使用graphics.MeasureString方法测量文本大小。根据测量的文本大小,我使用graphics.MeasureString绘制字符串。但在这方面,我使用StringFormat来测量和绘制字符串。但是我在一些文本中发现了文本剪辑问题,比如“left” 请查找下面的代码片段 string text = "Left"; Font font = new System.Drawing.Font("Segoe UI Semibold", 9F); StringFormat format
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);
请在下面的屏幕截图中查找文字剪辑
你能建议如何解决这个问题吗?试试下面的方法。我已从代码中删除了
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
我已根据OP的要求修改了答案,以使用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);
尝试以下方法。我已从代码中删除了
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
我已根据OP的要求修改了答案,以使用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);
你的绘图空间够大吗?你的e指的是哪里?这确实很奇怪。请注意,该标志不是必需的,除非您实际使用了一个大的多行矩形,因此可以将其禁用。或者您可以在宽度上添加1,这似乎是它所需要的全部!?!你的绘图空间够大吗?你的e指的是哪里?这确实很奇怪。请注意,该标志不是必需的,除非您实际使用了一个大的多行矩形,因此可以将其禁用。或者您可以在宽度上添加1,这似乎是它所需要的全部!?!如果您有一个未定义的变量
格式
?@SkryptX抱歉,我忘了删除它。我已经修改了answerHi@balaguruntahanmarimuthu,我已经在我的控件中使用了上面的代码,因为我公开了一些属性来允许或忽略换行文本。如果禁用换行符,则不应将文本换行到下一行。因此,我必须使用StringFormat=newStringFormat(StringFormatFlags.NoWrap)来实现我的要求。那么,在不删除stringFormat的情况下,有没有可能解决这个问题?@Jagadeesan请查看修改后的答案。@Balaguruntanmarimuthu,我无法手动增加宽度。因为这个问题只发生在一些字体中。因此,当手动增加宽度时,会导致一些其他问题。当您有未定义的变量格式,这应该如何工作?@SkryptX抱歉,我忘了删除它。我已经修改了answerHi@balaguruntahanmarimuthu,我已经在我的控件中使用了上面的代码,因为我公开了一些属性来允许或忽略换行文本。如果禁用换行符,则不应将文本换行到下一行。因此,我必须使用StringFormat=newStringFormat(StringFormatFlags.NoWrap)来实现我的要求。那么,在不删除stringFormat的情况下,有没有可能解决这个问题?@Jagadeesan请查看修改后的答案。@Balaguruntanmarimuthu,我无法手动增加宽度。因为这个问题只发生在一些字体中。因此,当手动增加宽度时,将导致其他一些问题。