用C#打印控件的内容?

用C#打印控件的内容?,c#,winforms,printing,C#,Winforms,Printing,我从来没有用C#打印过任何东西。我只是想知道做这件事的标准方法是什么。在我的表格上,我有几个列表框和几个文本框。我想打印他们的内容,并显示在一个打印预览他们,在一个表中有一个很好的布局。然后,从他们的我希望用户能够打印 提前谢谢 一种方法是使用打印实现。 至于。您需要使用System.Drawing.Printing库。您将使用PrintDocument.Print方法,您可以在上找到这是一个关于C#基本打印的方法。它处理文本,但可以很容易地扩展到绘制任何其他内容 C#中的打印与C#中的自定义绘

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

提前谢谢

一种方法是使用打印实现。
至于。

您需要使用System.Drawing.Printing库。您将使用PrintDocument.Print方法,您可以在

上找到这是一个关于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;
}
private void printDocument1\u PrintPage(对象发送者,System.Drawing.Printing.PrintPageEventArgs e)
{
Font Font=新字体(“Arial”,10f);
图形g=e.图形;
Pen rectPen=新笔(颜色:黑色,2f);
画笔=画笔。黑色;
//查找项目的最宽宽度

对于(int i=0;我的方法非常完美,因为我已经让用户将信息保存到一个文本文件中。谢谢!我得到了一个“找不到内容”错误,当我遵循您提供的MSDN链接时。应该显式处理
Pen rectPen
,还是GC处理它?GC不处理它。但这也不是一个很好的示例。此代码示例中的三个绘画对象Font、Pen和Brush实际上是我在类范围内声明的,而不是重新创建的每次调用PrintPage处理程序时,它们都会出现。我建议您在其他代码中也这样做。如果我记得您在一些笔和画笔周围使用了using语句。这太过分了,使代码更难阅读。只需将这些对象移动到类范围,并让它们在应用程序的生命周期内存在。我喜欢您提供的链接。谢谢,很容易使用!