【发布时间】:2018-05-31 08:27:46
【问题描述】:
所以我遇到了这个问题,我想在水晶报表的打印报表按钮中捕获打印按钮。如何做到这一点?
用户将点击水晶报表中的打印报表按钮,如第一图所示,打印页面将弹出,如第二图所示
所以当用户点击打印按钮时,我想做一些事情,比如在我的 vb 项目中放置一个消息框并运行一个查询。如何捕获“打印”按钮?
【问题讨论】:
-
你知道如何使用 c# 做到这一点吗?
所以我遇到了这个问题,我想在水晶报表的打印报表按钮中捕获打印按钮。如何做到这一点?
用户将点击水晶报表中的打印报表按钮,如第一图所示,打印页面将弹出,如第二图所示
所以当用户点击打印按钮时,我想做一些事情,比如在我的 vb 项目中放置一个消息框并运行一个查询。如何捕获“打印”按钮?
【问题讨论】:
你可以试试这个解决方案:
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
【讨论】:
你可以这样做! 要求: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
}
【讨论】:
如果您不想在 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 取决于文化
【讨论】: