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

編集:上記のコードを現在のコードに変更しました。次のページに移動してタイルを作成しますが、ページ数は2ではなく6と表示され(2ページの長さであると想定)、2ページ目にはすべての質問が空白になります。

4

2 に答える 2

2
    pageCount = 1;
    Index = 0;

そのコードは、印刷の開始時に呼び出されるBeginPrintイベントハンドラーに属します。PrintPageイベントハンドラーはページごとに呼び出されます。特定の各ページに表示される内容のみを描画する必要があります。

于 2013-02-09T16:37:45.230 に答える
0

このメソッドはページごとに呼び出されるため、次の呼び出しのためにこれらの変数の値を保持して、どこに行くのかがわかるようにする必要があります。

Indexはメソッドの外部で定義されているようです。したがって、printを呼び出す前にゼロに設定し、ここでゼロにしないと、おそらく必要な処理が実行されます。

于 2013-02-09T15:49:56.840 に答える