gpt4 book ai didi

c# - 面板上的 DrawToBitmap 为空白

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:01 37 4
gpt4 key购买 nike

所以我编写了一个类,其中存储了一些测试结果信息,然后是一个向用户显示该信息的控件。我想在此类上放置一个打印功能,以全页大小绘制控件并进行打印。但是它总是空白。该代码将面板视为控件,因为它可能是其他类型的值。我想一定有一些简单的东西我错过了。

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 顺序,但它没有改变任何东西。添加了保存调用以进行调试。看起来它实际上是在没有任何控件的情况下渲染面板的背景颜色。

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

最佳答案

将您的整个事件更改为此

    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 的面板并添加了两个按钮,我将一个事件附加到按钮 1。

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();
}
}
}

你必须试试这个,看看它是否有效,否则我今晚将无法休眠!

关于c# - 面板上的 DrawToBitmap 为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015884/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com