- 爱易网页
 
                        - 
                            ASP.NET教程
 
                        - NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现(二) 
 
                         
                    
                    
                    日期:2013-08-13  浏览次数:20653 次 
                    
                        
                        
            前篇说了.NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现,现在到了我们应用它们的时候了。
  
  我们需要做下面的一些事情:
  1、将上篇中写的程序输出类型改为类库并编译成PrinterPageSetting.dll;
  2、建立C#或VB.net项目,并在项目的引用处添加引用,在弹出的对话框的.NET标签中浏览并选择PrinterPageSetting.dll;
  3、在默认窗口Form1上增加一个TextBox文本框控件,默认名TextBox1(实际项目中建议采用命名及编码规范,如frmTestPrint,txtPrint)
  4、从工具箱中拖一个MainMenu到窗口Form1,创建mainMenu1菜单对象,建立主菜单menuFile
  5、单击menuFile,在其下方输入处分别建立menuFilePageSetup、menuFilePrintPreview、menuFilePrint菜单。我想大家明白这几个菜单的意义了,这是命名规范最基本的。
  准备工作做完了,看看我们怎么使用PrinterPageSetting轻松完成打印页面设置、打印机设置、打印预览对话框。
  第一步:在窗口类中申明并实例化PrinterPageSetting,当然实例化对象可以放在构造函数中。
    C#:
    private GoldPrinter.PrinterPageSetting printerPageSetting = new GoldPrinter.PrinterPageSetting();
    VB.net:
    Private printerPageSetting As New GoldPrinter.PrinterPageSetting
  第二步:写一个实现打印的具体过程
   C#:
   private void PrintDocument_PrintPage_Handler(object o,System.Drawing.Printing.PrintPageEventArgs e)
    {
        System.Drawing.Graphics g = e.Graphics;
        if (Draw(g))
        {
            e.HasMorePages = true;  //要分页打印
        }
        else
        {
            e.HasMorePages = false; //打印结束
        }
    }
    VB.net:
    Private Sub printDocument_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
        Dim g As System.Drawing.Graphics = e.Graphics
        If Me.Draw(g) Then
            e.HasMorePages = True   '要分页打印
        Else
            e.HasMorePages = False  '打印结束
        End If
    End Sub
  大家可以看到我们是怎么使程序在打印时自动分页的,就是设置HasMorePages属性为真就可以了。为了清晰可见,我将真正打印的具体过程独立出来用Draw()实现。
  在第二步中我们实现打印的具体过程,在PrinterPageSetting类中,我们并不知道打印的具体实现,就设计了PrintPage委托,让调用者自己实现,然后告诉PrinterPageSetting是用哪一个方法实现,也就是第三步了。
  第三步:打印委托
  在窗口空白处双击,在Form1_Load事件中输入相关语句。当然也可以放在构造函数中,这里为了描述的方便。
    C#:
    private void Form1_Load(object sender, System.EventArgs e)
    {
        this.printerPageSetting.PrintPage += new GoldPrinter.PrintPageDelegate(PrintDocument_PrintPage_Handler);
    }
  
  如果你不知上一句是什么意思,就用这一句吧:
  this.printerPageSetting.PrintPageValue = new GoldPrinter.PrintPageDelegate(PrintDocument_PrintPage_Handler);
  意思就是告诉printerPageSetting打印的具体实现过程是PrintDocument_PrintPage_Handler(第二步)
  
    VB.net:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.printerPageSetting.PrintPageValue = New GoldPrinter.PrintPageDelegate(AddressOf printDocument_PrintPage)
    End Sub
  大家还可以一试啊,
  Private WithEvents printDocument As System.Drawing.Printing.PrintDocument  '第一步:在申明窗口级变量
  Me.printDocument = Me.printerPageSetting.PrintDocument                     '第二步:在此将两个量联系起来
  将printDocument_PrintPage(...)加上    Handles printDocument.PrintPage      
  第四步:显示页面设置\打印机设置\打印预览对话框
  分别在几个菜单上单击,具体代码如下:
    C#:
     private void menuFilePageSetup_Click(object sender, System.EventArgs e)
    {
        this.printerPageSetting.ShowPageSetupDialog();      //显示页面设置对话框
    }
    private void menuFilePrintPreview_Click(object sender, System.EventArgs e)
    {
        this.printerPageSetting.ShowPrintPreviewDialog();   //显示打印预览对话框
    }
    private void menuFilePrint_Click(object sender, System.EventArgs e)
    {
        this.printerPageSetting.ShowPrintSetupDialog();     //显示打印预览对话框
    }
    VB.net:
    Private Sub menuFilePageSetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuFilePageSetup.Click
        Me.printerPageSetting.ShowPageSetupDialog()
    End Sub
    Private Sub menuFilePrintPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuFilePrintPreview.Click
        Me.printerPageSetting.ShowPrintPreviewDialog()
    End Sub