2010-05-18 2 views
0

J'utilise le code de MS à print a form mais il semble que le formulaire doit être visible avec un Show/ShowDialog() pour fonctionner. J'essaie d'utiliser le code pour un formulaire que je ne veux pas montrer.C# - Impression du formulaire

Des idées?

Répondre

0

simple est d'ouvrir juste quelque part en dehors de l'écran comme

this.Position=new Point(-100000,-100000); 

impression et fermez-le.

(ne pas oublier plusieurs moniteurs, c'est pourquoi j'ai utilisé de si grands nombres).

+0

Doit définir le paramètre StartPosition sur Manual, puis Location sur -100000. Merci – Jon

0

Eventuellement, vous pouvez utiliser la méthode DrawToBitmap.

+0

Malheureusement pas. – Jon

0

Si vous souhaitez imprimer des données à partir du formulaire d'une manière relativement simple, vous pouvez essayer à la place. J'utilise cette méthode lorsque j'ai besoin d'imprimer quelque chose à partir d'un formulaire. Cela utilise un contrôle WebBrowser caché et fonctionne plutôt bien.

Désolé, l'exemple provient d'un projet C++, mais il est bien converti en C#.

private: System::Void printButton_Click(System::Object^ sender, System::EventArgs^ e) { 
     StringBuilder^ html = gcnew StringBuilder(); 

     html->Append("<html><head></head><body>"); 
     html->Append("<h1>Children Clocked In</h1>"); 

     html->Append("<table>"); 
     html->Append("<tr><td>Last Name</td><td>First Name</td><td>Classroom</td><td>Program</td><td>In Time</td></tr>"); 
     for each (DataGridViewRow^ row in children->SelectedRows) 
     { 
      html->AppendFormat("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td></tr>", 
       row->Cells[2]->Value->ToString(), 
       row->Cells[3]->Value->ToString(), 
       row->Cells[4]->Value->ToString(), 
       row->Cells[5]->Value->ToString(), 
       Convert::ToDateTime(row->Cells[6]->Value).ToString("h:mm tt")); 
     } 
     html->Append("</table>"); 

     html->Append("</body></html>"); 

     WebBrowser^ webBrowser = gcnew WebBrowser(); 
     webBrowser->Visible = false; 
     webBrowser->Parent = this; 
     webBrowser->DocumentCompleted += gcnew System::Windows::Forms::WebBrowserDocumentCompletedEventHandler(this, &FormChildrenClockedIn::webBrowser1_DocumentCompleted); 
     webBrowser->DocumentText = html->ToString(); 
    } 
private: System::Void webBrowser1_DocumentCompleted(System::Object^ sender, System::Windows::Forms::WebBrowserDocumentCompletedEventArgs^ e) { 
     ((WebBrowser^)sender)->ShowPrintPreviewDialog(); 
     delete (WebBrowser^)sender; 
    }