C# - 打印表格

时间:2010-05-18 19:30:09

标签: c# .net winforms printing

我正在使用MS中的代码print a form,但看起来表单需要显示才能使用Show / ShowDialog()。

我正在尝试将代码用于我不想显示的表单。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

可能您可以使用DrawToBitmap方法。

答案 1 :(得分:0)

如果您希望以相对简单的方法从表单打印数据,您可能希望尝试这种方式。当我需要从表单中打印内容时,我使用此方法。这使用隐藏的WebBrowser控件,效果很好。

很抱歉,该示例来自C ++项目,但它可以很好地转换为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;
     }

答案 2 :(得分:0)

最简单的方法就是在屏幕外的某处打开它,如

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

打印然后关闭它。

(不要忘记多个监视器,这就是我使用如此大数字的原因)。