在WinForms中绘制垂直堆叠的文本
只要分割字符串为字符并绘制每一个加入的字体的行高到您的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);
}
我喜欢这个,因为它可以让你轻松地定制每个字母的高度;然而,在这个例子中,你并没有配置刷子。在现实生活中,您还需要在需要时渲染缓冲区,并简单地从OnPaint中的缓冲区复制。 – overslacked 2009-10-05 17:12:05
好点,我加了对象处置 – scottm 2009-10-05 18:24:42
如果你已经使用了正确的边界框,我会写一个简单地注入'\ n'的函数。
是的,通过使用\ n(换行符)的转义字符,它会强制关闭。但是,如果您在视觉设计器中输入\ n,则会将文本视为\ n,认为您的意思是具有实际的标点反斜杠字符,而不是换行符的转义字符。
Here是示例项目,做垂直文本。还有一些关于文本对齐的评论。
从示例中,您可以使用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;
}
}
不知道你可以指定对齐方式! – scottm 2009-10-05 21:43:19
对齐如何?集中对齐还是其他? – 2009-10-05 16:51:44
我不得不从您的帖子中删除图片,因为ImageShack已将其删除并用广告替换。有关更多信息,请参阅http://meta.stackexchange.com/q/263771/215468。如果可能的话,你最好重新上传它们。谢谢! – Undo 2015-09-22 00:42:57