2010-09-22 14 views
5

Estoy trabajando en una aplicación C#/.net. Quiero que el usuario pueda imprimir la vista previa, pero no quiero que el usuario pueda imprimir desde la impresión directamente desde el cuadro de diálogo de vista previa.Deshabilitar el botón "imprimir" en el cuadro de diálogo de vista previa de impresión.

El cuadro de diálogo de vista previa de impresión tiene un pequeño botón de impresora que envía las páginas previsualizadas directamente a la impresora. La pregunta es, ¿hay alguna manera de deshacerse/deshabilitar/interceptar este botón?

+0

posible duplicado de [¿Cómo puedo cambiar el texto en una ventana de Win32?] (Http://stackoverflow.com/questions/2668731/how -can-i-change-text-on-a-win32-window) –

+0

Mismo enfoque, pero pinvoke EnableWindow en su lugar. –

Respuesta

3

La clase PrintPreviewDialog es en realidad una envoltura alrededor de la clase PrintPreviewControl y es lo que está suministrando los botones en la barra de herramientas. Cualquier forma puede acoger la PrintPreviewControl así que lo que tendría que hacer es acoger la PrintPreviewControl en una forma de diálogo se crea:

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; 
    } 

} 

La propiedad Columnas que actualmente está siendo puesto a 1 es el número de páginas que muestra el control horizontalmente a través de la pantalla. La propiedad Zoom establece la escala de las páginas, siendo 1.0 la página completa; entonces < 1.0 sería una imagen reducida y> 1.0 sería una imagen expandida en el control por página. Lo que le gustaría hacer a la clase PreviewDialog anterior es agregarle un System.Windows.Forms.ToolStrip y luego agregar botones para manejar el zoom, y páginas según las propiedades mencionadas (Columnas y Zoom).

En la forma que traerá a la vista previa (no la forma PreviewDialog) que tendría un código como los siguientes:

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

espera que esto ayuda a

+0

Parece que es la dirección correcta. Desafortunadamente, en este momento no tengo los antecedentes para convertir lo anterior en código de trabajo. –

-3

this.reportViewer1.ShowPrintButton = false;

+0

¿dónde dice que está utilizando los servicios de informes? –

11

Puede acceder al botón Imprimir y a cualquier otro botón desde un control de vista previa de impresión buscando en la colección de controles del contenedor.

Para el botón de impresión:

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

así, para desactivarlo,

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

En VB utilizo esto, utilizar un convertidor de código en 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 
3

Gracias todos ustedes por este hilo. Solo quería compartir otro método basado en la respuesta anterior de Ion Roata. Sobre andar en la clase base con una clase personalizada PrintPreviewDialog. Hace un código de aspecto más limpio 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. 

} 

Y el código para crear una instancia ...

customPrintPreviewDialog objCPPdialog = new customPrintPreviewDialog(); 
Cuestiones relacionadas