none
PrintPreviewDialog类,showdialog后,如何判断用户按下了打印机的图标按钮 RRS feed

  • 问题

  •             Dim PrintPriview As PrintPreviewDialog New PrintPreviewDialog
                PrintPriview.Document = PrintDocument1
                PrintPriview.PrintPreviewControl.Zoom = 1.0
                PrintPriview.WindowState = FormWindowState.Maximized
                PrintPriview.ShowDialog()

    到这里,显示了预览的界面。我的问题是,怎么判断用户点击了左上角的打印机图标按钮呢?


    学无止境

    2012年5月5日 9:33

答案

  • 你好,

    在使用PrintPreviewDialog的时候,当打印按钮被按下,说明PrintDocument要开始打印,你可以在PrintDocumentBeginPrint事件中加入代码来判断是否开始打印。实际上,PrintPreviewDialogPrint都会触发PrintDocumentBeginPrint事件,只是一个用于预览另一个是实际的打印,所以还需要另外一个PrintDocument1.PrintController.IsPreview状态来判断是否是实际打印。最终的代码可能是这样的:

       Private Sub PrintDocument1_BeginPrint(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
    
            If PrintDocument1.PrintController.IsPreview = False Then
    
    ‘开始打印。。
    
            End If
    
    End Sub

    希望以上信息可以解决你的问题。

    Regards,


    Shanks Zen
    MSDN Community Support | Feedback to us

    2012年5月7日 7:16
    版主
  • 在使用PrintPreviewDialog中恐怕是不行的,但是可以在PrintPreviewControl是可以的,你只需要在更改完PageSettings后调用PrintPreviewControl.InvalidatePreview(http://msdn.microsoft.com/zh-cn/library/system.windows.forms.printpreviewcontrol.invalidatepreview.aspx) 方法来刷新文档预览。

    如果需要PrintPreviewControl相关的代码,请告诉我,谢谢!

    Regards,


    Shanks Zen
    MSDN Community Support | Feedback to us

    谢谢您耐心的回复!

    关于在出现打印预览之后可以再次进行页面设置(边距调整)的问题,我已经通过给PrintPreviewDialog中的工具条增加一个Item的办法实现了我想要的功能。


    学无止境

    2012年5月8日 9:21
  • 如果可以的话,不妨给出你的代码,谢谢!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    下面是实现这个效果的代码,请指导!

    Public Class Form1
        Private WithEvents PrintDocument1 As New Printing.PrintDocument
        Private WithEvents PrintPriview As New PrintPreviewDialog
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            With PrintPriview
                .Document = PrintDocument1
                .PrintPreviewControl.Zoom = 1.0
                'PrintPreviewControl1 = .PrintPreviewControl
                Dim MyToolStrip As ToolStrip = .Controls("toolStrip1")
                Dim tmpImage As System.Drawing.Image '可以设置一张图片的
                MyToolStrip.Items.Add("页面设置", tmpImage, New EventHandler(AddressOf DoPrintSetup)) '增加一个页面设置按钮
                MyToolStrip.Items(MyToolStrip.Items.Count - 1).ForeColor = Color.Blue
                .WindowState = FormWindowState.Maximized
                .ShowDialog()
            End With
        End Sub
        Private Sub DoPrintSetup()
            MsgBox("页面设置的代码就可以写在这里了")
        End Sub
    End Class


    学无止境

    2012年5月9日 4:28

全部回复

  • 是我的问题提问得不对吗?

    学无止境

    2012年5月7日 6:01
  • 是我的问题提问得不对吗?

    学无止境

    不是,你这个问题没有直接答案的。我建议你使用Spy技术获取这个按钮的“ID”,然后引入其它对应的API处理。

    大致思路如此,你可以到“msdnmg@microsoft.com”去提问,谢谢!

    2012年5月7日 6:20
  • 你好,

    在使用PrintPreviewDialog的时候,当打印按钮被按下,说明PrintDocument要开始打印,你可以在PrintDocumentBeginPrint事件中加入代码来判断是否开始打印。实际上,PrintPreviewDialogPrint都会触发PrintDocumentBeginPrint事件,只是一个用于预览另一个是实际的打印,所以还需要另外一个PrintDocument1.PrintController.IsPreview状态来判断是否是实际打印。最终的代码可能是这样的:

       Private Sub PrintDocument1_BeginPrint(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
    
            If PrintDocument1.PrintController.IsPreview = False Then
    
    ‘开始打印。。
    
            End If
    
    End Sub

    希望以上信息可以解决你的问题。

    Regards,


    Shanks Zen
    MSDN Community Support | Feedback to us

    2012年5月7日 7:16
    版主
  • 在使用PrintPreviewDialog的时候,当打印按钮被按下,说明PrintDocument要开始打印,你可以在PrintDocumentBeginPrint事件中加入代码来判断是否开始打印。实际上,PrintPreviewDialogPrint都会触发PrintDocumentBeginPrint事件,只是一个用于预览另一个是实际的打印,所以还需要另外一个PrintDocument1.PrintController.IsPreview状态来判断是否是实际打印。最终的代码可能是这样的:
       Private Sub PrintDocument1_BeginPrint(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
    
            If PrintDocument1.PrintController.IsPreview = False Then
    
    ‘开始打印。。
    
            End If
    
    End Sub

    希望以上信息可以解决你的问题。

    Regards,


    Shanks Zen

    MSDN Community Support | Feedback to us

    十分感谢Shanks Zen版主的回复。

    等了两天了,Shanks Zen版主回复的内容正是我想要的。

    我想不再另开贴,继续请教关于这个问题,可以吗?

    在PrintDocument1.PrintController.IsPreview=False时,也就是在出现打印预览之后可以再次进行页面设置(边距调整)吗?如何实现能不能给个例子啃一啃?


    学无止境

    2012年5月7日 11:40
  • 在使用PrintPreviewDialog中恐怕是不行的,但是可以在PrintPreviewControl是可以的,你只需要在更改完PageSettings后调用PrintPreviewControl.InvalidatePreview(http://msdn.microsoft.com/zh-cn/library/system.windows.forms.printpreviewcontrol.invalidatepreview.aspx) 方法来刷新文档预览。

    如果需要PrintPreviewControl相关的代码,请告诉我,谢谢!

    Regards,


    Shanks Zen
    MSDN Community Support | Feedback to us

    2012年5月8日 3:38
    版主
  • 在使用PrintPreviewDialog中恐怕是不行的,但是可以在PrintPreviewControl是可以的,你只需要在更改完PageSettings后调用PrintPreviewControl.InvalidatePreview(http://msdn.microsoft.com/zh-cn/library/system.windows.forms.printpreviewcontrol.invalidatepreview.aspx) 方法来刷新文档预览。

    如果需要PrintPreviewControl相关的代码,请告诉我,谢谢!

    Regards,


    Shanks Zen
    MSDN Community Support | Feedback to us

    谢谢您耐心的回复!

    关于在出现打印预览之后可以再次进行页面设置(边距调整)的问题,我已经通过给PrintPreviewDialog中的工具条增加一个Item的办法实现了我想要的功能。


    学无止境

    2012年5月8日 9:21
  • 如果可以的话,不妨给出你的代码,谢谢!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月9日 1:02
    版主
  • 如果可以的话,不妨给出你的代码,谢谢!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    下面是实现这个效果的代码,请指导!

    Public Class Form1
        Private WithEvents PrintDocument1 As New Printing.PrintDocument
        Private WithEvents PrintPriview As New PrintPreviewDialog
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            With PrintPriview
                .Document = PrintDocument1
                .PrintPreviewControl.Zoom = 1.0
                'PrintPreviewControl1 = .PrintPreviewControl
                Dim MyToolStrip As ToolStrip = .Controls("toolStrip1")
                Dim tmpImage As System.Drawing.Image '可以设置一张图片的
                MyToolStrip.Items.Add("页面设置", tmpImage, New EventHandler(AddressOf DoPrintSetup)) '增加一个页面设置按钮
                MyToolStrip.Items(MyToolStrip.Items.Count - 1).ForeColor = Color.Blue
                .WindowState = FormWindowState.Maximized
                .ShowDialog()
            End With
        End Sub
        Private Sub DoPrintSetup()
            MsgBox("页面设置的代码就可以写在这里了")
        End Sub
    End Class


    学无止境

    2012年5月9日 4:28