2013-04-13 23 views
7

Desidero visualizzare la finestra di dialogo di stampa prima di stampare il documento, in modo che l'utente possa scegliere un'altra stampante prima di stampare. Il codice per la stampa è:Finestra di dialogo Mostra stampa prima della stampa

private void button1_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       PrintDocument pd = new PrintDocument(); 
       pd.PrintPage += new PrintPageEventHandler(PrintImage); 
       pd.Print(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message, ToString()); 
      } 
     } 
     void PrintImage(object o, PrintPageEventArgs e) 
     { 
      int x = SystemInformation.WorkingArea.X; 
      int y = SystemInformation.WorkingArea.Y; 
      int width = this.Width; 
      int height = this.Height; 

      Rectangle bounds = new Rectangle(x, y, width, height); 

      Bitmap img = new Bitmap(width, height); 

      this.DrawToBitmap(img, bounds); 
      Point p = new Point(100, 100); 
      e.Graphics.DrawImage(img, p); 
     } 

questo codice sarà in grado di stampare il modulo corrente?

risposta

15

devi usare PrintDialog

PrintDocument pd = new PrintDocument(); 
pd.PrintPage += new PrintPageEventHandler(PrintPage); 
PrintDialog pdi = new PrintDialog(); 
pdi.Document = pd; 
if (pdi.ShowDialog() == DialogResult.OK) 
{ 
    pd.Print(); 
} 
else 
{ 
     MessageBox.Show("Print Cancelled"); 
} 

A cura (da Commento)

Su 64-bit Windows e con alcune versioni di .NET potrebbe essere necessario impostare pdi.UseExDialog = true; per far apparire la finestra di dialogo.

+0

quando si preme il pulsante, dialogo di stampa non si apre, ma il messagebox visualizzazione Stampa Annullato è mostrato – user2257581

+0

@ user2257581: lo provo ora, funziona, faccio una nuova applicazione e testarlo di nuovo, vederlo funziona – KF2

+2

Su Windows a 64 bit e con alcune versioni di .NET potresti dover impostare 'pdi.UseExDialog = true; 'per visualizzare la finestra di dialogo. Vedi http://stackoverflow.com/q/6385844/202010 per i dettagli. –

1

Per ragioni di completezza, il codice dovrebbe includere una direttiva using

using System.Drawing.Printing; 

per ulteriore riferimento si prega di goto PrintDocument Class

Problemi correlati