![f9d305836df85e7cb608342bd1998e58.png](https://i-blog.csdnimg.cn/blog_migrate/8e4624d658fa29e1047cea5b7db8bd81.jpeg)
原文链接:
No.24 使用【打印】对话框和【打印窗体】mp.weixin.qq.com![3b7ef2033fb05c36b25537bc9cc33331.png](https://i-blog.csdnimg.cn/blog_migrate/96bff7dc4bef62083575671a4eca7d39.png)
使用【打印】对话框
这几天我们讲了通用对话框【字体】【打开】【另存为】【颜色】的使用,今天我们学习最后一节:【打印】对话框。
其实,打印对话框用的场景不多,我们今天大致了解一下。
这个对话框可以用来指定打印方式,如打印页的范围,打印质量,打印的份数等。还包含当前安装的打印机信息,并允许配置或者重新安装默认打印机。
需要注意的是这个对话框并不给打印机传送数据,只是设定打印机打印数据的情况。
属性:
Copies:打印的份数
FromPage:开始打印页
ToPage:结束页
使用【打印窗体】
【打印】对话框实在是用的太少了,我们讲一下跟打印有关的,相对来说应用场景多一些的,大家去超市购物结账的时候随着付款找零的结束收款机会自动打印出小票,是你的购物清单和付款找零等各种信息,这是怎样实现的呢?
我没有开发过此类软件,但是我个人觉得应该是利用了窗体的PrintForm方法。
我们可以做一个实验:
多数人都没有打印机,我们可以用虚拟打印机来测试。以Windows7来说,系统里有个自带的虚拟打印机,可以在没有打印机的情况下虚拟打印并生成.xps文件来查看打印效果。我们先设置这台虚拟打印机为默认打印机:
点击开始按钮,选择“设备和打印机”
![6293aa69b52ed2ae917e9a2c28fd7525.png](https://i-blog.csdnimg.cn/blog_migrate/b7e42b037169f257df334ddab7937044.png)
右键“Microsoft XPS Document Writer”设置默认打印机,如果没有这台打印机,可以从网上下载一个虚拟打印机,一般都是打印成PDF文件,效果是一样的。
![b674bad7073719aa5133994d1d012c00.png](https://i-blog.csdnimg.cn/blog_migrate/1dc444b0be20dfadf59d97bbd13ba521.jpeg)
然后我们在VB中窗体上随便放置一些控件,在按钮的单击事件中写入代码:
![3d487e1c1ae91c35c6ca462facb9fc2a.png](https://i-blog.csdnimg.cn/blog_migrate/992e3d99b7e2171677cd33eeea2ccaf7.png)
![93954cd16912d848a64001192f35fa12.png](https://i-blog.csdnimg.cn/blog_migrate/8071f814ff279d475a52a4eac22d3f53.png)
然后我们来运行程序:
![169827c398488e4ab241e156072d64e7.gif](https://i-blog.csdnimg.cn/blog_migrate/e38ed42e1d62bc0ca18ac43b58a2c34e.gif)
我们看到,用Form1.PrintForm方法打印出来的效果:
![d0fb8f8499c23246e686ec9dc87263ab.png](https://i-blog.csdnimg.cn/blog_migrate/621d3766cbefa2cbe071125f865b3cc9.png)
除了标题栏,窗体上所有的控件包括文字都以图像的方式打印出来。
了解到这种情况,我们就可以实现打印小票的功能。
首先我们把所有的控件都删除,打印小票用的纸张是白色的,我们的窗体是其他颜色的,我们就把窗体的背景色改为白色,打印出来就不会突兀。
![2991d2eed6cce1edb8aff010d3208213.png](https://i-blog.csdnimg.cn/blog_migrate/30bdaa59331ddccd8c53c850bdc7b17f.png)
小票上的文字,我们用Label控件来代替,并可以设置字体,大小等,最重要的一点,把Label控件的BackStyle属性设置为0,这样Label控件就没有背景色了。
![278010674dedb355892e0e18a1f734bf.png](https://i-blog.csdnimg.cn/blog_migrate/d2f0cd5d540561ef4a3fec7ee4c26dea.png)
按图设置大概的样子:
![2931adb41e68f6592f339ad97326aea9.png](https://i-blog.csdnimg.cn/blog_migrate/952c40eb5a1211776e6690723a21ac2d.jpeg)
我们用另一个窗体的命令按钮来测试,如果实际应用中不用这样,可以在窗体加载事件中打印即可。
![75361a526d69a9a08f511408bc8ed97e.png](https://i-blog.csdnimg.cn/blog_migrate/16cb71e5f415e7f848b558da58b97671.png)
打印出来的效果,如果身边有打印机最好是超市那种热敏纸打印机,就可以试试,效果是一样的。
![0f96f36025b8cc6e505bce57d5b0381c.png](https://i-blog.csdnimg.cn/blog_migrate/82460118c061153752fa0d95d6bb3e0f.jpeg)
当然了,这只是个例子,程序设计思路是扫描枪扫描一下,就增加一个Label,同时计数变量,价格变量都随之变动,最后得出总数和总价然后再打印。