在WinForms中绘制垂直堆叠的文本

在WinForms中绘制垂直堆叠的文本

问题描述:

最好使用Graphics对象,如何绘制字符串以便字符仍然正常导向,但是垂直堆叠?在WinForms中绘制垂直堆叠的文本

+0

对齐如何?集中对齐还是其他? – 2009-10-05 16:51:44

+0

我不得不从您的帖子中删除图片,因为ImageShack已将其删除并用广告替换。有关更多信息,请参阅http://meta.stackexchange.com/q/263771/215468。如果可能的话,你最好重新上传它们。谢谢! – Undo 2015-09-22 00:42:57

只要分割字符串为字符并绘制每一个加入的字体的行高到您的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); 
    } 
+0

我喜欢这个,因为它可以让你轻松地定制每个字母的高度;然而,在这个例子中,你并没有配置刷子。在现实生活中,您还需要在需要时渲染缓冲区,并简单地从OnPaint中的缓冲区复制。 – overslacked 2009-10-05 17:12:05

+0

好点,我加了对象处置 – 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; 
     } 
    } 
+1

不知道你可以指定对齐方式! – scottm 2009-10-05 21:43:19