ドキュメントの印刷に問題があります。私はプログラミングの専門家ではありませんが、約1年前から独学で学んでいるので、基本を理解しています。問題がどこにあるかはわかっていると思いますが、修正方法がわからないため、運がなくても答えを見つけるためにデューデリジェンスを行いました。
ユーザーが印刷する特定のレポートを選択してから、印刷ボタンまたは印刷プレビューボタンを押して、レポートを印刷または適切に表示できるレポートのリストを作成しようとしています。印刷ボタンまたは印刷プレビューボタンを1つの特定のレポートに接続すると、正常に機能します。リストから印刷するように変更すると、問題が発生し始めます。問題は、レポートが2ページ以上の場合にのみ発生し、変更を加えなくてもランダムに発生します。(正常に動作する場合と動作しない場合があります)問題は、二重露光された写真のように、すべてのページを1枚のシートに印刷しようとすることです。以下のスクリーンショットを参照してください。
これが私が重要だと信じているコードです。
public class Report //Creates a new class called Report.
{
public PrintDocument Document = new PrintDocument();
private int LineNumber;
private int PageNumber;
private int TotalNumberOfPages;
private PrintDocument Set() //Sets up the document.
{
Body.Add(new NewLine());
LineNumber = 0;
PageNumber = 1;
Document.DocumentName = Title[0].Text;
Document.PrintPage += new PrintPageEventHandler(OnPrintPage);
return Document;
}
private void OnPrintPage(object sender, PrintPageEventArgs e) //Sets up the lines to be printed.
{
int Offset = e.MarginBounds.Top;
int PageEnd = e.MarginBounds.Top + e.MarginBounds.Height;
//Instructions on how to build the page. Trust me, it's right.
if (AllLines.Count > LineNumber)
{
e.HasMorePages = true;
/* ^This is where the problem is problem is. When this is made true, it sometime changes back to
false (as it should) when it gets to the end, but sometime it does not. The times that it randomly
does not, it still starts the page over but does it right on top of the old page like I printed
the first page out, then put the paper back into the printer and printed the second page over it.
*/
PageNumber++;
}
else
{
e.HasMorePages = false;
LineNumber = 0;
PageNumber = 1;
}
}
public void Print() //Sets the command to send the document to the printer.
{
Set().Print();
}
public void PrintPreview() //Set the command to display the document.
{
PrintPreviewDialog PP = new PrintPreviewDialog();
PP.Document = Set();
PP.ShowDialog();
}
}
public partial class frmReports : Form
{
#region PRINT DOCUMENTS //Creates the reports.
public Report Report1()
{
Report Page = new Report();
//Instructions on how to build the page. Trust me, it's right.
return Page;
}
public Report Report2()
{
Report Page = new Report();
//Instructions on how to build the page. Trust me, it's right.
return Page;
}
public Report Report3()
{
Report Page = new Report();
//Instructions on how to build the page. Trust me, it's right.
return Page;
}
public Report Report4()
{
Report Page = new Report();
//Instructions on how to build the page. Trust me, it's right.
return Page;
}
public Report Report5()
{
Report Page = new Report();
//Instructions on how to build the page. Trust me, it's right.
return Page;
}
#endregion
List<Report> Reports = new List<Report>(); //Creates a Reports List
public frmReports()
{
InitializeComponent();
//Adds the reports to the Reports List
Reports.Add(Report1());
Reports.Add(Report2());
Reports.Add(Report3());
Reports.Add(Report4());
Reports.Add(Report5());
foreach (Report r in Reports) //Adds the reports to the List Box already added to the form.
lstReportList.Items.Add(r);
}
private void OnClick_btnPrint(object sender, EventArgs e) //When clicking the Print button.
{
if (lstReportList.SelectedItem != null)
foreach(Report r in Reports.FindAll(r => r == lstReportList.SelectedItem) r.Print(); //Determains all of the items in the List Box and prints them out.
}
private void OnClick_btnPrintPreview(object sender, EventArgs e) //When clicking the Print Preview button.
{
if (lstReportList.SelectedItem != null)
foreach(Report r in Reports.FindAll(r => r == lstReportList.SelectedItem) r.PrintPreview(); //Determains all of the items in the List Box and displays them.
}
}