代码之家  ›  专栏  ›  技术社区  ›  Reto Meier

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

  •  5
  • Reto Meier  · 技术社区  · 15 年前

    最好使用 Graphics 对象,如何绘制一个字符串,使字符仍保持正常方向,但垂直堆叠?

    4 回复  |  直到 9 年前
        1
  •  7
  •   scottm    15 年前

    只需将字符串拆分为字符,然后绘制每个字符,并将字体的行高添加到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);
        }
    
        2
  •  3
  •   SwDevMan81    15 年前

    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;
            }
        }
    
        3
  •  1
  •   overslacked    15 年前

    如果您已经使用了正确的边界框,我将编写一个简单地注入\n的函数。

        4
  •  0
  •   DRapp    15 年前

    是的,通过使用\n(新行)的转义符,它将强制向下。但是,如果您在可视化设计器中输入\n,它会将文本设置为认为您要使用实际的标点反斜杠字符,而不是换行符的转义字符。