在 C# 中打印控件的内容?

Bob*_*lan 5 c# printing winforms

我从来没有用 C# 打印过任何东西。我只是想知道这样做的标准方法是什么。在我的表单上,我有一些列表框和一些文本框。我想打印它们的内容并在打印预览中显示它们,并在表格中使用漂亮的布局。然后从他们我希望用户能够打印。

提前致谢!

Pau*_*sik 5

这是一个关于 C# 中基本打印的不错的小教程。它处理文本,但可以轻松扩展以绘制其他任何内容。

C# 中的打印与 C# 中的自定义绘画非常相似。最大的区别在于坐标系从屏幕表示翻转,并且您必须考虑页面的跨度(如果/在必要时)。您打印的方式也有点反直觉,因为您必须启动打印过程然后处理页面打印事件。

例子:

下面是一个打印事件处理程序的简单示例,它假定存在名为 listBox1 的列表框控件,其中包含一些项目。它绘制每个项目以及它周围的框。

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    Font font = new Font("Arial", 10f);
    Graphics g = e.Graphics;
    Pen rectPen = new Pen(Color.Black, 2f);
    Brush brush = Brushes.Black;

    // find widest width of items
    for (int i=0; i<listBox1.Items.Count; i++)
        if(maxItemWidth < (int)g.MeasureString(listBox1.Items[i].ToString(), font).Width)
            maxItemWidth = (int)g.MeasureString(listBox1.Items[i].ToString(), font).Width;

    // starting positions:
    int itemHeight = (int)g.MeasureString("TEST", font).Height + 5;
    int maxItemWidth = 0;
    int xpos = 200;
    int ypos = 200;

    // print
    for (int i = 0; i < listBox1.Items.Count; i++)
    {
        g.DrawRectangle(rectPen, xpos, ypos, maxItemWidth, itemHeight );
        g.DrawString(listBox1.Items[i].ToString(), font, brush, xpos, ypos);

        ypos += itemHeight;
    }

    e.HasMorePages = false;
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*nby 2

您将需要使用 System.Drawing.Printing 库。您将使用 PrintDocument.Print 方法,您可以在MSDN 页面上找到该方法的示例