如何在不显示/显示的情况下打印Windows窗体

Mong Zhu

我正在尝试自动打印一系列Windows窗体。我不需要给他们看。我在Internet上找到的代码示例仅在显示带有show()的表单时有效我需要使用数据初始化表单并将其发送到打印机,这是我正在使用的代码:

public partial class Form2_withoutShow : Form{

     PrintDocument PrintDoc;

     Bitmap memImage;

     public Form2_withoutShow (Data data)
     {

        InitializeComponent();

        /*
           Initialize Data (texboxes, charts ect.) here
       */

        this.PrintDoc = new PrintDocument();
        this.PrintDoc.PrintPage += PrintDoc_PrintPage;
        this.PrintDoc.DefaultPageSettings.Landscape = true;
     }


     public void Print()
     {
        this.PrintDoc.Print();
     }

     void PrintDoc_PrintPage(object sender, PrintPageEventArgs e)
     {

        int x = SystemInformation.WorkingArea.X;
        int y = SystemInformation.WorkingArea.Y;
        int width = this.Width;
        int height = this.Height; 

        Rectangle bounds = new Rectangle(x, y, width, height);

        Bitmap img = new Bitmap(width, height); 

        this.DrawToBitmap(img, bounds);
        Point p = new Point(10, 10);

        e.Graphics.DrawImage(img, p);
     }

     private void Form2_withoutShow_Load(object sender, EventArgs e)
     {
         // remove TITLEBar
         this.ControlBox = false;
         this.Text = String.Empty;
     }
}

Print()在for循环中从另一个类调用该方法,并通过构造函数传递要初始化的数据。

MSDN示例捕获了屏幕上应显示表单的部分。这对我不起作用。如果我不打电话,我现在使用的方法只产生空窗口的打印show()如何在不调用show()方法的情况下将数据放入表单像在显示时最小化窗口之类的方法也不起作用,因为这也是打印结果:最小化的窗口。

雷扎·阿盖伊(Reza Aghaei)

在显示表单之前,表单及其控件未处于Created状态。要强制创建表单及其控件,只需调用CreateControl(bool fIgnoreVisible)表单的内部方法即可:

var f = new Form1();
var createControl = f.GetType().GetMethod("CreateControl",
                BindingFlags.Instance | BindingFlags.NonPublic);
createControl.Invoke(f, new object[] { true });

var bm = new Bitmap(f.Width, f.Height);
f.DrawToBitmap(bm, new Rectangle(0, 0, bm.Width, bm.Height));
bm.Save(@"d:\bm.bmp");

还要删除表单Load事件处理程序中具有的代码,并将其放入表单的构造函数中。

注意

对于该问题,还有其他解决方法:

  • 例如,您可以在屏幕边界之外的位置显示表单,然后再次将其隐藏。设置Location(-32000, -32000)和一套StartPositionManualShowHide绘制位图前的形式。
  • 或作为另一个例子,可以显示与表单Opacity设置为0,然后ShowHide绘制位图前的形式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不显示打印对话框的情况下打印WebBrowser控件内容?

如何在不显示 dtype 的情况下从对象在 Python 中打印?

如何在不显示超链接的情况下打印纯文本

如何在不显示任何 if else 语句的情况下打印数组数据

如何在不显示文档的情况下编写段落

如何在不显示输出的情况下运行链接

如何在不显示Windows控制台的情况下运行Python脚本

如何在不显示System.Windows.Controls.WebBrowser的情况下使用它?

如何在不显示C#的情况下不显示PrintDialog()的情况下直接打印rdlc报告?

如何在Google地图中不显示标记图标的情况下显示信息窗口

如何在不显示开始菜单的情况下显示任务栏?

MPAndroidChart:如何在不显示Y轴的情况下显示极限线?

如何在不显示垂直滚动条的情况下显示标题?

如何在不显示Windows登录窗口的情况下从远程桌面连接中的会话注销?

如何在不显示终端窗口的情况下运行Cygwin程序(xemacs)?

如何在不显示的情况下编辑保存在.fig文件中的图形的属性

发送后如何在不显示推送消息的情况下运行该功能?

如何在不显示所选值的情况下创建下拉按钮

如何在不显示php的情况下强制使用php和ajax下载图像

如何在不显示URL的情况下将参数传递给Angularjs的router-ui?

如何在不显示多个图标的情况下添加多个悬停工具?

如何在不显示查询结果的情况下测量查询持续时间?

如何在不显示InCall屏幕的情况下阻止呼叫

如何在不显示FEST-SWING的情况下进行GUI测试

如何在不显示为新数组的情况下向php数组添加元素

如何在不显示先前值的情况下更改绘图中的x-label?

如何在不显示matplotlib图的情况下进行鼻子测试?

如何在不显示Flask中的URI字段的情况下进行重定向?

如何在不显示保存对话框的情况下保存Excel文件