Panel上的DrawToBitmap为空白

时间:2012-06-13 13:28:11

标签: c# winforms zedgraph

所以我写了一个类,它存储了一些测试结果信息,然后是一个控件,向用户显示该信息。我想在这个类上放置一个print函数来绘制一个完整页面大小的控件并打印它。然而它总是空白。代码将面板视为控件,因为它可能是其他类型的值。我想我必须有一些简单的东西。

void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        System.Drawing.Size oldSize = printData.Size;

        printData.Size = new System.Drawing.Size(e.MarginBounds.Width, e.MarginBounds.Height);
        System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(printData.Size.Width, printData.Size.Height);

        InvertZOrderOfControls(printData.Controls);
        printData.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, printData.Size.Width, printData.Size.Height));
        InvertZOrderOfControls(printData.Controls);

        e.Graphics.DrawImage(bitmap, e.MarginBounds.Location);
        bitmap.Save(@"C:\Users\jdudley\Documents\File.bmp");
        printData.Size = oldSize;
    }

按照this thread的建议颠倒了控件的Z顺序,但它没有改变任何东西。 添加了保存调用以进行调试。看起来它实际上没有任何控件渲染面板的背景颜色。

编辑:这是在打印的背景下,但我没有问题打印什么。我的错误在于创建位图。我添加的保存行证明了这一点,因为它创建了一个空白的位图文件。

1 个答案:

答案 0 :(得分:2)

将整个活动更改为此

    void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(printData.Width, printData.Height);
        printData.DrawToBitmap(bitmap, new System.Drawing.Rectangle(new Point(0, 0), printData.Size));
        e.Graphics.DrawImage(bitmap, e.MarginBounds.Location);
    }

修改

这是我的整个项目。我创建了一个名为printData的面板,我添加了两个按钮,我将一个事件附加到button1。

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    PrintDocument printDocument = new PrintDocument();
    public Form1()
    {
        InitializeComponent();
        pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
    }

    void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(printData.Width, printData.Height);
        printData.DrawToBitmap(bitmap, new System.Drawing.Rectangle(new Point(0, 0), printData.Size));
        e.Graphics.DrawImage(bitmap, e.MarginBounds.Location);
    }


    private void button1_Click(object sender, EventArgs e)
    {
        pd.Print();
    }
}
}

你必须尝试这个,看它是否有效,否则我今晚无法入睡!!