在.net打印预览对话框中禁用“打印”按钮

我正在开发一个C#/ .net应用程序。 我希望用户能够打印预览,但我不希望用户能够从预览对话框直接打印。

打印预览对话框上有一个小打印机按钮,可将预览页面直接发送到打印机。 问题是,有没有办法摆脱/禁用/拦截这个按钮点击?

PrintPreviewDialog类实际上是PrintPreviewControl类的包装器,它正在提供工具栏中的按钮。 任何表单都可以托管PrintPreviewControl,因此您需要做的是在您创建的对话框表单中托管PrintPreviewControl:

public partial class PreviewDialog : Form { public PreviewDialog() { this.printPreviewControl1 = new System.Windows.Forms.PrintPreviewControl(); this.SuspendLayout(); // // printPreviewControl1 // this.printPreviewControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.printPreviewControl1.Location = new System.Drawing.Point(0, 0); this.printPreviewControl1.Name = "printPreviewControl1"; this.printPreviewControl1.Size = new System.Drawing.Size(292, 273); this.printPreviewControl1.TabIndex = 0; this.printPreviewControl1.Columns = 1; this.printPreviewControl1.Zoom = 1.0; } } 

当前设置为1的Columns属性是控件在屏幕上水平显示的页数。 Zoom属性设置页面的比例,1.0是整页; 所以<1.0将是缩小的图像,> 1.0将是每页控件中的扩展图像。 你想对上面的PreviewDialog类做些什么是向它添加一个System.Windows.Forms.ToolStrip,然后添加按钮来处理缩放,以及每个提到的属性的页面(列和缩放)。

在将带来预览的forms(而不是PreviewDialog表单)中,您将拥有如下代码:

  private void buttonPrintPreview_Click(object sender, EventArgs e) { PreviewDialog dlg = new PreviewDialog(); dlg.ShowDialog(); return; } 

希望这会有所帮助

您可以通过在容器的控件集合中搜索来访问打印按钮以及打印预览控件中的任何其他按钮。

对于打印按钮:

 (ToolStripButton)((ToolStrip)printPreviewDialog1.Controls[1]).Items[0] 

所以,要禁用它,

 ((ToolStripButton)((ToolStrip)printPreviewDialog1.Controls[1]).Items[0]).Enabled = false; 

谢谢大家这个post。 我只想分享另一种基于Ion Roata上面的答案的方法。 使用自定义PrintPreviewDialog类覆盖基类。 使代码更清晰JMHO。

 class customPrintPreviewDialog : PrintPreviewDialog { public customPrintPreviewDialog() //default constructor { // over ride the print button default enabled property ((ToolStripButton)((ToolStrip)this.Controls[1]).Items[0]).Enabled = false; } // Add more of your customization here. } 

以及实例化的代码……

  customPrintPreviewDialog objCPPdialog = new customPrintPreviewDialog(); 

在VB中我使用它,使用代码转换器来C#:

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click CType(PrintPreviewDialog1.Controls(1), ToolStrip).Items(0).Enabled = False PrintPreviewDialog1.ShowDialog() End Sub 

this.reportViewer1.ShowPrintButton = False;