2009-10-05 89 views
4

最好使用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

回答

7

只要分割字符串爲字符並繪製每一個加入的字體的行高到您的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

1

如果你已經使用了正確的邊界框,我會寫一個簡單地注入'\ n'的函數。

0

是的,通過使用\ n(換行符)的轉義字符,它會強制關閉。但是,如果您在視覺設計器中輸入\ n,則會將文本視爲\ n,認爲您的意思是具有實際的標點反斜槓字符,而不是換行符的轉義字符。

3

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