Windows printPreviewDialog显示的窗口太多

Windows printPreviewDialog显示的窗口太多,windows,forms,printing,c++-cli,Windows,Forms,Printing,C++ Cli,我想使用printPreviewDialog控件。我添加了4个控件:richTextBox、button、printPreviewDialog和printDocument。对于printDocument1,我添加了: private: System::Void printDocument1_PrintPage(System::Object^ sender, System::Drawing::Printing::PrintPageEventArgs^ e) {

我想使用printPreviewDialog控件。我添加了4个控件:richTextBox、button、printPreviewDialog和printDocument。对于printDocument1,我添加了:

    private: System::Void printDocument1_PrintPage(System::Object^  sender, System::Drawing::Printing::PrintPageEventArgs^  e) {
               printDocument1->Print();
               e->Graphics->DrawString(richTextBox1->Text,richTextBox1->Font, Brushes::Black,(float)80,(float)80 );
    } 
对于按钮:

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    printPreviewDialog1->Document = printDocument1;
    printPreviewDialog1 -> ShowDialog();
     }
代码还可以,我可以构建和运行应用程序。但当我点击按钮时,我收到如下信息:


有人能帮我吗?谢谢大家

不要在PrintPage事件处理程序中调用PrintDocument::Print()。当Print()方法调用再次调用PrintPage事件处理程序时,所有的shell都将丢失。需要一段时间才能使您的程序因此网站的名称而崩溃,您可能首先会用完句柄的配额


只需删除该语句,它没有任何用处。

我不知道这行是否<代码>打印文档1->打印()递归调用
printDocument1\u PrintPage
event@CarlWinder-谢谢你的快速回答。你说得对,当我删除
printDocument1->Print()预览对话框正常工作,但。。。如何在不使用
printDocument1->print()的情况下打印文档??
ShowDialog
将返回一个类似
Ok
Cancel
的值,我记不清实际代码的名称。但是你可以检查
ShowDialog
中的返回码,如果它是
Ok
的话,然后调用
Print
函数。@CarlWinder:谢谢你,伙计:)这就是我想知道的。