【问题标题】:Capture print report 'Print' Button in crystal reports在水晶报表中捕获打印报表“打印”按钮
【发布时间】:2018-05-31 08:27:46
【问题描述】:

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

用户将点击水晶报表中的打印报表按钮,如第一图所示,打印页面将弹出,如第二图所示

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

【问题讨论】:

  • 你知道如何使用 c# 做到这一点吗?

标签: vb.net crystal-reports


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以这样做! 要求:C#(但您可以更改为 VB.NET)、Visual Studio 2015、WPF 平台 其中:[GenericReportViewer] 这就是你的组件水晶报表

    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 
    
      }
    

    【讨论】:

    • 当我拥有带有 system.windows 的 system.windows.forms 库时出现错误。仅添加 system.windows 会给我以下错误:应用程序给出了一个模棱两可的参考,因为我正在使用 application.startuppath。
    【解决方案3】:

    如果您不想在 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 取决于文化

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      相关资源
      最近更新 更多