C# 在WinForms中绘制垂直堆叠的文本
最好使用C# 在WinForms中绘制垂直堆叠的文本,c#,.net,winforms,text,system.drawing,C#,.net,Winforms,Text,System.drawing,最好使用图形对象,如何绘制字符串,使字符仍然正常定向,但垂直堆叠?如果您已经使用了正确的边界框,我将编写一个函数,简单地插入'\n'。是的,通过使用转义字符\n(新行),它将强制向下。但是,如果您在visual designer中输入\n,它会将文本放置为实际的标点反斜杠字符,而不是换行符。只需将字符串拆分为多个字符,然后绘制每个字符,并将字体的行高添加到Y轴变量中: protected override void OnPaint(PaintEventArgs e) {
图形
对象,如何绘制字符串,使字符仍然正常定向,但垂直堆叠?如果您已经使用了正确的边界框,我将编写一个函数,简单地插入'\n'。是的,通过使用转义字符\n(新行),它将强制向下。但是,如果您在visual designer中输入\n,它会将文本放置为实际的标点反斜杠字符,而不是换行符。只需将字符串拆分为多个字符,然后绘制每个字符,并将字体的行高添加到Y轴变量中:
protected override void OnPaint(PaintEventArgs e)
{
float x = 10.0F;
float y = 10.0F;
string drawString = "123";
using(SolidBrush brush = new SolidBrush(Color.Black))
using (Font drawFont = new Font("Arial", 16))
{
foreach (char c in drawString.ToCharArray())
{
PointF p = new PointF(x, y);
e.Graphics.DrawString(c.ToString(), drawFont, brush, p);
y += drawFont.Height;
}
}
base.OnPaint(e);
}
是一个执行垂直文本的示例项目。还有一些关于文本对齐的评论
从该示例中,可以使用StringAlignment.Center将字符居中,并将其传递给DrawString调用的最后一个参数
protected override void OnPaint(PaintEventArgs e)
{
float x = 10.0F;
float y = 10.0F;
Font drawFont = new Font("Arial", 16);
SolidBrush drawBrush = new SolidBrush(Color.Black);
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
foreach (char c in Text.ToCharArray())
{
PointF p = new PointF(x, y);
e.Graphics.DrawString(c.ToString(), drawFont, drawBrush, p, sf);
y += drawFont.Height;
}
}
对齐呢?中心对齐还是其他?我不得不从你的帖子中删除该图像,因为ImageShack已将其删除并替换为广告。有关更多信息,请参阅。如果可能的话,你最好重新上传。谢谢我喜欢这个,因为它允许您轻松定制每个字母的高度;但是,在本例中,您没有处理笔刷。在现实生活中,您还希望在需要时渲染到缓冲区,并简单地从OnPaint中的缓冲区复制。不知道您可以这样指定对齐方式!