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

时间:2010-09-22 19:11:09

标签: c# .net printing

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

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

5 个答案:

答案 0 :(得分:11)

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

对于打印按钮:

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

所以,要禁用它,

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

答案 1 :(得分:3)

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,然后添加按钮来处理缩放,以及每个提到的属性的页面(列和缩放)。

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

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

希望这有帮助

答案 2 :(得分:3)

谢谢大家这个帖子。我只想分享另一种建立在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();

答案 3 :(得分:1)

在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

答案 4 :(得分:-3)

this.reportViewer1.ShowPrintButton = False;