Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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# System.Drawing.以矩形中心对齐方式从右向左垂直打印绘图字符串_C#_Winforms_Printing_System.drawing - Fatal编程技术网

C# System.Drawing.以矩形中心对齐方式从右向左垂直打印绘图字符串

C# System.Drawing.以矩形中心对齐方式从右向左垂直打印绘图字符串,c#,winforms,printing,system.drawing,C#,Winforms,Printing,System.drawing,我想在一个指定的矩形垂直方向上画一个字符串,下面的代码给出了我想要的内容,但是文本流是从左到右的,我试图从右到左。就像右边的第1行和左边的第2行一样。我也做了改造,但没有运气 RectangleF tabbor = new RectangleF(0, 0,borHeight, 44.35F); StringFormat sf = new StringFormat(); //if (cmbDir.SelectedItem.Equals("Vertical"))

我想在一个指定的矩形垂直方向上画一个字符串,下面的代码给出了我想要的内容,但是文本流是从左到右的,我试图从右到左。就像右边的第1行和左边的第2行一样。我也做了改造,但没有运气

 RectangleF tabbor = new RectangleF(0, 0,borHeight, 44.35F);
        StringFormat sf = new StringFormat();
        //if (cmbDir.SelectedItem.Equals("Vertical"))
        //    sf.FormatFlags = StringFormatFlags.DirectionVertical;
        sf.LineAlignment = StringAlignment.Center;
        sf.Alignment = StringAlignment.Center;
        SolidBrush drawBrush = new SolidBrush(Color.Black);
        //Do 180 degree Rotatation Transformation
        ev.Graphics.RotateTransform(90, MatrixOrder.Append);                   
        ev.Graphics.TranslateTransform(xPos+44.35F, yPos, MatrixOrder.Append);                    
        ev.Graphics.DrawString("T", printFont, Brushes.Black, tabbor, sf);
        if (cbPreview.Checked)
            ev.Graphics.DrawRectangle(Pens.Black, Rectangle.Round(tabbor));
我正在寻找从上到下的文本,现在它处于相反的位置,从右到左的行位置,这是有效的


您可以通过执行180度旋转变换来实现这一点

        RectangleF tabbor = new RectangleF(0, 0, 44.35F,150.0F);         
        StringFormat sf = new StringFormat();
        sf.FormatFlags = StringFormatFlags.DirectionVertical;            
        String drawString = "First Line Second Line";
        Font drawFont = new Font("Arial", 16);
        SolidBrush drawBrush = new SolidBrush(Color.Black);
        float x = 0F;
        float y = 0F;
        StringFormat drawFormat = new StringFormat();
        drawFormat.FormatFlags = StringFormatFlags.DirectionVertical;
        //Do 180 degree Rotatation Transformation
        ev.Graphics.RotateTransform(180,MatrixOrder.Append);
        ev.Graphics.TranslateTransform(50, 150,MatrixOrder.Append);
        ev.Graphics.DrawString(drawString, drawFont, Brushes.Black, tabbor,sf);               
        ev.Graphics.DrawRectangle(Pens.Black, Rectangle.Round(tabbor)); 

感谢您的关注,我可以从您的代码中看到我所期望的,但是,我必须在连续循环中的每一页的特定位置x,Y上打印,因为我在这里没有得到负坐标,在用我的代码实现时被击中。请让我知道更多的信息。仅供参考,我正在尝试打印制表符分隔符。页面高度/分隔符数量,然后在垂直方向的中心绘制矩形和字符串。我必须严格地依赖于点,正如我在你们的逻辑中看到的,将矩形移动到X,Y的负坐标,然后变换它。解决方案在不接触我正在查看的矩形坐标的情况下,矩形内的文本应进行变换。将字符串位置设置为坐标0,0,然后进行旋转。旋转后进行变换X+矩形宽度,Y。检查编辑的代码我完全按照您的建议进行了操作,但运气不好,我不确定丢失了什么。我按照你说的进行了变换和旋转,文本没有纸,什么也看不见,坐标在页面内,可能是横行,旋转没有纸。检查我编辑的代码。strtab[0]是文本。在了解了旋转变换后,我现在得到了它。我已经编辑了我的代码,现在正在运行。坐标应为X+宽度,Y+高度。。谢谢