如何获得适合一行的字符数(打印c#)

本文关键字:打印 字符 何获得 合一 | 更新日期: 2023-09-27 18:25:15

我已经有了这段代码,但它给了我错误的结果。

    private void document_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
    int charPerLine = e.MarginBounds.Width / (int)e.Graphics.MeasureString("m", txtMain.Font).Width;
    }

txtMain是一个文本框。

如何获得适合一行的字符数(打印c#)

这样就可以了。除以强制转换为整数的变量时要小心。在Width属性小于1的情况下,您可以在这里接受被零整除,该属性将被截断为零。您的应用程序中可能不太可能有这么小的字体,但这仍然是一种很好的做法。

private void document_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    if( (int)e.Graphics.MeasureString("m", txtMain.Font).Width > 0 )
    {
        int charPerLine = 
            e.MarginBounds.Width / (int)e.Graphics.MeasureString("m", txtMain.Font).Width;
    }
}

但真正的问题是,为什么你甚至需要知道每行的字符数。除非你试图做某种ASCII艺术,否则你可以使用Graphics.DrawString的不同重载,让GDI+在一个边界矩形内为你布局文本,而不需要知道一行可以容纳多少个字符。

MSDN中的这个示例向您展示了如何做到这一点:

// Create string to draw.
String drawString = "Sample Text";
// Create font and brush.
Font drawFont = new Font("Arial", 16);
SolidBrush drawBrush = new SolidBrush(Color.Black);
// Create rectangle for drawing.
float x = 150.0F;
float y = 150.0F;
float width = 200.0F;
float height = 50.0F;
RectangleF drawRect = new RectangleF(x, y, width, height);
// Draw rectangle to screen.
Pen blackPen = new Pen(Color.Black);
e.Graphics.DrawRectangle(blackPen, x, y, width, height);
// Set format of string.
StringFormat drawFormat = new StringFormat();
drawFormat.Alignment = StringAlignment.Center;
// Draw string to screen.
e.Graphics.DrawString(drawString, drawFont, drawBrush, drawRect, drawFormat);

因此,如果您试图打印一页文本,您只需将drawRect设置为e.MarginBounds,并为drawString插入一页文本即可。

另一件事是,如果您试图打印表格数据,您可以将页面划分为矩形——每列/行一个矩形(无论您需要什么),并使用e.Graphics.DrawLine重载来打印表边界。

如果你发布更多关于你实际努力实现的细节,我们可以提供更多帮助。