2009-11-08 1 views
1

listView 항목을 인쇄하는 데 문제가 있습니다. 반복 한 페이지에 맞는 어떤C#의 여러 페이지 목록보기를 인쇄하는 데 문제가 있습니다. 그것을 알아낼 수 없습니다

  1. 그것을 인쇄 : 내가 생각 문제는 그래서 무슨 일인지입니다 private void PrintPageDetail(PrintPageEventArgs e) 이다. (인쇄 된 것보다 많은 데이터가 있습니다.) 페이지 바닥 글과 머리글은 올바른 페이지 번호로 인쇄됩니다. 다음 페이지에서 새 데이터를 매핑 할 때마다 메모리를 지우는 데 어려움을 겪고 있습니다.

  2. 취소를 누르지 않으면 (아마도 "반환;"이 무한 루프이기 때문에) 인쇄 미리보기 및 인쇄가 중지되지 않습니다.

이 문제는 당신이 foreach 루프를 사용하고 있기 때문에 당신이 PrintPageDetail (PrintPageEventArgs 전자)에 입력 할 때마다, 당신은 _factorsView의 처음부터 시작한다는 사실입니다 도움

private void PrintDocument(object sender, PrintPageEventArgs e) 
    { 
     // Use inches for all measurements. 

     e.Graphics.PageUnit = GraphicsUnit.Inch; 

     PrintPageHeader(e); 

     PrintPageDetail(e); 

     PrintPageFooter(e); 
    } 

    // Print the page header/footer/details. 
    private void PrintPageHeader(PrintPageEventArgs e) 
    { 
     e.Graphics.DrawString("Factors List Report", 
           _headerFont, _reportBrush, 3.0F, 0.75F); 
     e.Graphics.DrawLine(_reportPen, 0.5F, 1.15F, 7.5F, 1.15F); 
    } 

    private void PrintPageFooter(PrintPageEventArgs e) 
    { 
     e.Graphics.DrawLine(_reportPen, 1.0F, 10.0F, 7.5F, 10.0F); 

     e.Graphics.DrawString("Printed on " + DateTime.Now.ToLongDateString(), 
           _footerFont, _reportBrush, 1F, 10.2F); 

     _pageNumber++; 
     e.Graphics.DrawString(string.Format("Page: {0}", _pageNumber), 
           _footerFont, _reportBrush, 7F, 10.2F); 
    } 

    private void PrintPageDetail(PrintPageEventArgs e) 
    { 
     // Create variables to hold position on page. 
     float leftMargin = e.MarginBounds.Left; 
     float topMargin = e.MarginBounds.Top; 
     float i = 1.25F; 


     e.HasMorePages = false; 
     foreach (string printerLine in _factorsView) 
     { 
      e.Graphics.DrawString(printerLine, _detailFont, _reportBrush, 1.0F, i); 


      if (i >= 9.75) 
      { 
       i += 1.25F; 
       e.HasMorePages = true; 
       return; 
      } 
      else 
       i += .25F; 
     } 
    } 
} 

답변

0

주셔서 감사합니다 . 대신이 방법의 외부에있는 위치를 추적해야합니다. 이런 식으로 뭔가 :

int myLocation = 0; 

private void PrintPageDetail(PrintPageEventArgs e) 
    { 
     // Create variables to hold position on page. 
     float leftMargin = e.MarginBounds.Left; 
     float topMargin = e.MarginBounds.Top; 
     float i = 1.25F; 


     e.HasMorePages = false; 
     while(myLocation < _factorsView.Length) 
     { 
      e.Graphics.DrawString(_factorsView[myLocation], _detailFont, _reportBrush, 1.0F, i); 
      myLocation++; 


      if (i >= 9.75) 
      { 
       i += 1.25F; 
       e.HasMorePages = true; 
       return; 
      } 
      else 
       i += .25F; 
     } 
    } 

은 정말 인덱싱 그것이 무엇인지 유형에 따라 변경 될 수 있습니다 어떤 종류의 _factorsView 모르겠지만, 그것은 당신에게 아이디어를 줄 것이다.