crystal 报告中的捕获打印报告 'Print' 按钮

Capture print report 'Print' Button in crystal reports

所以我遇到了这个问题,我想在 crystal 报告中捕获打印报告按钮中的打印按钮。如何做到这一点?

用户点击crystal报表中的Print Report按钮,如第一张图所示,会弹出打印页面,如第二张图

所以当用户单击打印按钮时,我想在我的 vb 项目中做一些事情,比如放置一个消息框和 运行 一个查询。如何捕获'Print'按钮?

您可以试试这个解决方案:

Private Sub Frm_stampa_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     ' Hide default button
    crv_stampa.ShowPrintButton = False

    ' New print button
    For Each ctrl As Control In crv_stampa.Controls
        If TypeOf ctrl Is Windows.Forms.ToolStrip Then
            Dim btnNew As New ToolStripButton
            btnNew.Text = "Print"
            btnNew.ToolTipText = "Print"
            btnNew.Image = My.Resources.stampa
            btnNew.DisplayStyle = ToolStripItemDisplayStyle.Image

            CType(ctrl, ToolStrip).Items.Insert(0, btnNew)

            AddHandler btnNew.Click, AddressOf tsItem_Click
        End If
    Next
    ' ---------------------------------------------
End Sub



Private Sub tsItem_Click(sender As System.Object, e As System.EventArgs)

    ' Put your code here, before print

    Dim PrintDialog As New PrintDialog()

    If PrintDialog.ShowDialog = Windows.Forms.DialogResult.OK Then

        rpt.PrintOptions.PrinterName = PrintDialog.PrinterSettings.PrinterName

        rpt.PrintToPrinter(PrintDialog.PrinterSettings.Copies, PrintDialog.PrinterSettings.Collate, PrintDialog.PrinterSettings.FromPage, PrintDialog.PrinterSettings.ToPage)

    End If

End Sub

你可以的! Requeirements:C#(不过可以改成VB.NET),Visual Studio 2015,WPF平台 其中:[GenericReportViewer] 就是你的组件 crystal 报告

private void GenericReportViewer_Loaded(object sender, RoutedEventArgs e){
//where: GenericReportViewer thats it name your crystal report component
 System.Windows.Controls.Button button = GenericReportViewer.FindName("btnPrint") as 
 System.Windows.Controls.Button;
      button.Click += MyMethod;
  }

private void MyMethod(object sender, RoutedEventArgs e){

   //Your code here 

  }

如果您不想在 crviewer 工具条中添加自定义按钮,而只想捕获原生打印按钮的点击事件,您可以试试这个:

Private Sub frmViewReport_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
     For Each control In crViewer.Controls

            If TypeOf control Is ToolStrip Then

                For Each item In control.items
                    If item.AccessibleName = "Imprimir Relatório" Then
                        Dim prtButton As ToolStripButton = DirectCast(item, ToolStripButton)
                        AddHandler prtButton.Click, AddressOf dostuff
                        Exit For
                    End If
                Next
                Exit For
            End If
        Next
End Sub

Private Sub dostuff()
        MsgBox("Print button was pressed")
End Sub

请注意 item.AccessibleName 取决于文化