Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WinForms中绘制垂直堆叠的文本_C#_.net_Winforms_Text_System.drawing - Fatal编程技术网

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中的缓冲区复制。不知道您可以这样指定对齐方式!