- Windows程序设计与架构
- 蔺华 汤春林 蔡兴旺编著
- 859字
- 2020-08-28 17:44:34
2.5 案例分析5 使用打印
2.5.1 案例描述
本节介绍在应用程序中如何将数据输出到打印机,以及程序中使用打印设置的基本方法。
2.5.2 案例分析
PrintDocument类的使用,打印设置和预览功能的实现。
2.5.3 案例实现与技巧
① 首先,运行Visual Studio 2005,创建名为PrintApp的Windows应用程序。
② 向窗体拖曳一个MenuStrip控件,一个PrintDocument控件,一个PrintDialog控件和一个PrintPreviewDialog控件。
③ 将MenuStrip控件命名为file,在file菜单下添加三个下拉菜单,Text属性分别为“打印设置”、“打印预览”、“打印”。
④ 添加一个下拉菜单其Text属性为“-”,作为分隔线。
⑤ 添加下拉菜单“退出”。
⑥ 在设计视图中,修改printDialog1和printPreviewDialog1控件的Document属性为“printDocument1”。
⑦ 修改“文件”菜单的name属性为“fileToolStripMenuItem”,下拉菜单“打印设置”、“打印预览”和“打印”的name属性分别为“pageSetupToolStripMenuItem”、“printPreviewToolStripMenuItem”和“printToolStripMenuItem”。
⑧ 向窗体添加一个RichTextBox控件,在属性“窗口”中修改属性“Dock”为“Fill”,使RichTextBox控件填充满这个窗体。
⑨ 在“打印设置”菜单上双击,在打开的事件响应程序中添加如下代码:
printDialog1.ShowDialog();
⑩ 在“打印预览”菜单上双击,在打开的事件响应程序中添加如下代码:
try { printPreviewDialog1.ShowDialog(); } catch (Exception ex) { MessageBox.Show(ex.Message,"打印出错",MessageBoxButtons.OK,Message BoxIcon.Error); }
⑪ 在“打印”菜单上双击,在打开的事件响应程序中添加如下代码:
try { printDocument1.Print(); } catch (Exception ex) { MessageBox.Show(ex.Message,"打印出错",MessageBoxButtons.OK,Message BoxIcon.Error); }
⑫ 转换到Form1的设计窗口,选中printDocument1控件,在右下方属性窗口中添加响应PrintPage事件的方法,如图2-12所示。
图2-12 修改控件属性
⑬ 在方法中添加如下代码:
Graphics g = e.Graphics; //获得绘图对象 float linesPerPage = 0; //页面的行号 float yPosition = 0; //绘制字符串的纵向位置 int count = 0; //行计数器 float leftMargin = e.MarginBounds.Left; //左边距 float topMargin = e.MarginBounds.Top; //上边距 string line = null;// 行字符串 StringReader lineReader= new StringReader(richTextBox1.Text); Font printFont = this.richTextBox1.Font; //当前的打印字体 SolidBrush myBrush = new SolidBrush(Color.Black);//刷子 linesPerPage = e.MarginBounds.Height / printFont.GetHeight(g);//每页可打印的行数 //逐行的循环打印一页 while(count < linesPerPage && ((line=lineReader.ReadLine()) != null)) { yPosition = topMargin + (count * printFont.GetHeight(g)); g.DrawString(line,printFont,myBrush,leftMargin,yPosition,new StringFormat()); count++; } if(line != null) e.HasMorePages = true; else e.HasMorePages = false;
⑭ 在程序开头添加如下引用:
using System.IO; using System.Draw;
⑮ 程序运行结果如图2-13所示。
⑯ 未检测到打印机设备,程序抛出异常被捕获,如图2-14所示。
图2-13 程序运行结果(一)
图2-14 程序运行结果(二)