2013-02-09 93 views
1

我有一個作業程序的最後一部分的問題,我必須做出多項選擇測試,並在最後給出打印版本的測試。老師給我們的代碼能夠打印多個頁面,但它似乎只是複製第一頁。我試圖混淆代碼來嘗試使其工作,但它使無數的第一頁或程序崩潰導致我的索引計數器超出了我製作的存儲問題和答案的數組。這是我停下的地方。打印多頁

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
{ 

    Font titleFont = new Font("Brush Script Std", 25); 
    Font typeFont = new Font("Times New Roman", 15); 

    int questionCount = 1; 
    int xcoordinate = 20, ycoordinate = 140; 
    String IndexQuestion, IndexAnswerA, IndexAnswerB, IndexAnswerC, IndexAnswerD, IndexCorrectAnswer; 

    if (testTaken == "yes") 
    { 
     e.Graphics.DrawString("Visual Basic Assessment Questions", 
       titleFont, Brushes.Black, 100, 20); 

     e.Graphics.DrawString("Page" + pageCount, 
       typeFont, Brushes.Black, 100, 90); 

     while (Index < 10) 
     { 
      IndexQuestion = DataTier.allTestQuestions[Index].Question.ToString(); 
      IndexAnswerA = DataTier.allTestQuestions[Index].AnswerA.ToString(); 
      IndexAnswerB = DataTier.allTestQuestions[Index].AnswerB.ToString(); 
      IndexAnswerC = DataTier.allTestQuestions[Index].AnswerC.ToString(); 
      IndexAnswerD = DataTier.allTestQuestions[Index].AnswerD.ToString(); 
      IndexCorrectAnswer = DataTier.allTestQuestions[Index].CorrectAnswer.ToString(); 
      e.Graphics.DrawString(questionCount + "." + DataTier.allTestQuestions[Index].Question, typeFont, Brushes.Black, xcoordinate, ycoordinate); 
      ycoordinate += 20; 
      e.Graphics.DrawString(IndexAnswerA, typeFont, Brushes.Black, xcoordinate, ycoordinate); 
      ycoordinate += 20; 
      e.Graphics.DrawString(IndexAnswerB, typeFont, Brushes.Black, xcoordinate, ycoordinate); 
      ycoordinate += 20; 
      e.Graphics.DrawString(IndexAnswerC, typeFont, Brushes.Black, xcoordinate, ycoordinate); 
      ycoordinate += 20; 
      e.Graphics.DrawString(IndexAnswerD, typeFont, Brushes.Black, xcoordinate, ycoordinate); 
      ycoordinate += 20; 
      e.Graphics.DrawString("Correct Answer is: " + IndexCorrectAnswer, typeFont, Brushes.Red, xcoordinate, ycoordinate); 

      ycoordinate += 60; 
      questionCount += 1; 
      Index += 1; 
      if (ycoordinate >= e.MarginBounds.Bottom) 
      { 
       pageCount++; 
       e.HasMorePages = true; 
      } 
    } 
} 

編輯:我已將上面的代碼更改爲我現在擁有的代碼。它進入下一頁並製作圖塊,但頁數爲6而不是2(僅假設爲2頁長),第二頁爲所有問題的空白。

回答

2
pageCount = 1; 
    Index = 0; 

該代碼屬於BeginPrint事件處理程序,即在打印開始時被調用的處理程序。您的PrintPage事件處理程序會爲每個頁面調用,您應該只繪製每個特定頁面上的內容。

+0

好吧,我已經改變了,它已經停止了無盡的打印。它仍然不會將信息傳遞到下一頁,而只停留在第一頁或者只是崩潰。 – Kimmy1235 2013-02-09 16:51:41

0

爲每個頁面調用此方法,因此您必須爲下次調用保留這些變量的值,以便您知道要去哪裏。

似乎索引是在方法外部定義的,所以如果在調用print之前將其設置爲零,並且不在此處將其置零,則可能會按照您的要求進行設置。