2010-03-25 3 views
1

.NET의 PrintDocument, PrintDialog 및 PrintPreviewDialog 클래스를 사용하여 내 응용 프로그램에 대한 인쇄 및 인쇄 미리보기를 성공적으로 구현했습니다.사용자 정의 인쇄 미리보기 대화 상자에서 사용되는 인쇄 미리보기 컨트롤

그러나 내 응용 프로그램은 툴킷을 사용하여 표준 .NET 컨트롤의 모양을 개선합니다. 툴킷에는 대부분의 .NET 컨트롤 버전이 있지만 인쇄 컨트롤에는없는 버전이 있습니다.

따라서 이러한 컨트롤의 모양이 나머지 응용 프로그램과 일치하도록하려면 도구 키트 양식을 기반으로하는 사용자 지정 PrintPreviewDialog를 만들고 .NET PrintPrewviewControl을 포함 시키려고합니다.

내 문제는 PrintPreviewControl이 항상 "표시 할 페이지가 없습니다"라는 것입니다. .NET PrintPreviewDialog를 사용하여이 작업을 수행하는 데 문제가 없었으며 잘못된 작업을 볼 수 없습니다.

이것은 .NET 2.0 PrintPreviewControl이므로 PrintDocument를 할당 한 후 InvalidatePreview()를 호출해야한다는 것을 알고 있습니다. 그것은 내가 그것을 두는 곳 상관하지 않는 것 같습니다 그러나, PrintPage 이벤트 핸들러가

public class PrintEngine 
    { 
      ...rest of class... 

     public PrintEngine() 
     { 
     m_printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage); 
     } 

     public void PrintPreview() 
     { 
     //ORIGINAL CODE USING .NET DIALOG WORK OK 
     //PrintPreviewDialog dlg1 = new PrintPreviewDialog(); 
     //dlg1.Document = m_printDoc; 
     //PrepareImageForPrinting(); 
     //dlg1.ShowDialog(); 

     //CODE USING MY CUSTOM DIALOG DO NOT WORK? 
     MyPrintPreviewDialog dlg2 = new MyPrintPreviewDialog(); 

     dlg2.Document = m_printDoc; 

     PrepareImageForPrinting(); //Creates the m_printImage List 

     dlg2.ShowDialog(); 
     } 

     private void printDoc_PrintPage(object sender, PrintPageEventArgs e) 
     { 
     e.Graphics.DrawImage(m_printImages[m_currentPage], new Point(0, 0)); 

     m_currentPage++; 

     e.HasMorePages = m_currentPage < m_pagesHigh; 
     } 

    }//end PrintEngine class 

    public class MyPrintPreviewDialog : KryptonForm 
    { 
     public PrintDocument Document 
     { 
      get { return m_printPreviewControl.Document; } 
      set 
      { 
       m_printPreviewControl.Document = value; 
       m_printPreviewControl.InvalidatePreview(); 
      } 
     } 

     public MyPrintPreviewDialog() 
     { 
      InitializeComponent(); 

      m_printPreviewControl = new PrintPreviewControl(); 

      m_printPreviewControl.StartPage = 0; 
     } 

     private void MyPrintPreviewDialog_Load(object sender, EventArgs e) 
     { 
      m_printPreviewControl.Document.DefaultPageSettings = new PageSettings(); 
      m_printPreviewControl.Document.PrinterSettings = new PrinterSettings(); 

      m_printPreviewControl.InvalidatePreview(); 
     } 

    }//end MyPrintPreviewDialog class 

답변

2

...라는 결코 극복 나는이 선으로 당황 조금 있어요 : 당신은

m_printPreviewControl = new PrintPreviewControl(); 

을하지 않습니다 이 컨트롤을 부착하거나 배치하는 것 같습니다.

당신은 디자이너를 배치하는 경우,이 라인을 제거해야하며, 당신이 사방 디자인 타임 컨트롤의 이름을 사용해야합니다 ..

수동으로 만들려면, 당신은 this.Controls.Add(m_printPreviewControl); 같은 ATR 이상의 뭔가가 필요

+0

어쨌든, 어리 석다. 그것은 다른 시험에서 남겨 두었습니다. 네가 말하는 것처럼 거기에 없어. 그것과 모든 작품을 제거했습니다. 눈의 두 번째 쌍은 종종 필요한 모든 것입니다! 건배. – Kildareflare

관련 문제