2012-06-08 2 views
0

printPreviewDialog 컨트롤을 사용하고 싶습니다. richTextBox, button, printPreviewDialog 및 printDocument의 네 가지 컨트롤을 추가합니다. printDocument1를 들어 내가 추가printPreviewDialog 너무 많은 창을 표시합니다.

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

코드 괜찮습니다, 나는 구축하고 aplication를 실행할 수 있습니다.

http://www.screenr.com/fJr8

이 사람이 나를 도와 드릴까요 : 내가 버튼을 클릭 할 때하지만 난 이런 일을받은? 고마워요!

+0

이 줄이 있는지 궁금합니다. 'printDocument1-> Print();'는 재귀 적으로'printDocument1_PrintPage' 이벤트를 호출합니다. –

+0

@CarlWinder - 빠른 응답을 주셔서 감사합니다. 당신은 맞습니다.'printDocument1-> Print();를 삭제하면 미리보기 대화 상자가 제대로 작동하지만 ...'printDocument1-> Print();'를 사용하지 않고 문서를 인쇄하는 방법은 무엇입니까? –

+0

'ShowDialog'는'Ok' 나'Cancel'과 같은 값을 반환 할 것이고, 실제 코드가 무엇인지 머리 위를 기억할 수는 없습니다. 그러나'ShowDialog'의 반환 코드를'Ok'라고 체크하면'Print' 함수를 호출 할 것입니다. –

답변

0

PrintPage 이벤트 처리기에서 PrintDocument :: Print()를 호출하지 마십시오. Print() 메서드 호출로 PrintPage 이벤트 처리기를 다시 호출하면 모든 지옥이 끊어집니다. 이 웹 사이트의 이름으로 프로그램이 중단되는 데는 시간이 걸립니다. 먼저 핸들 할당량이 부족할 것입니다.

문을 제거하면 유용하지 않습니다.