2013-04-13 19 views
7

Chcę wyświetlić okno dialogowe drukowania przed wydrukowaniem dokumentu, aby użytkownik mógł wybrać inną drukarkę przed wydrukowaniem. Kod drukowania:Pokaż okno dialogowe drukowania przed wydrukowaniem

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

czy ten kod będzie mógł wydrukować bieżący formularz?

Odpowiedz

15

Musisz użyć 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"); 
} 

redakcją (z komentarza)

Na 64-bit Windows i przy niektórych wersjach .NET może trzeba ustawić pdi.UseExDialog = true; aby pojawiło się okno dialogowe.

+0

kiedy nacisnąć, okno dialogowe drukowania przycisk nie otwiera, ale messagebox wyświetlania Drukuj Anulowane jest wyświetlane – user2257581

+0

@ user2257581: testuję to teraz, działa, tworzę nową aplikację i testuję ją ponownie, zobacz to działa – KF2

+2

W 64-bitowym systemie Windows i niektórych wersjach .NET może być konieczne ustawienie 'pdi.UżywanieExDialog = true; 'aby okno dialogowe pojawiło się. Szczegółowe informacje można znaleźć na stronie http://stackoverflow.com/q/6385844/202010. –

1

Dla kompletności, kod powinien zawierać using dyrektywa

using System.Drawing.Printing; 

dla dalszego odniesienia proszę goto PrintDocument Class