Как напечатать несколько страниц C#
Моя программа генерирует штрих-коды , поэтому у меня есть проблема, когда дело доходит до печати следующей страницы. Предварительный просмотр не показывает следующую страницу и останавливается . Может кто-нибудь мне помочь?. У меня есть цикл for , поэтому, когда я проверяю границы страницы и устанавливаю значение hasmorepages true, предварительный просмотр не прекращает генерировать предварительные просмотры .
Что я уже пробовал:
for (int i = 0; i < second; i++) { // MessageBox.Show(c + " c value " + p + " p value"); if (c < Int32.Parse(textBoxY.Text)) { for (o = 0; o < first; o++) { { if (textBoxX.Text == "1" & comboBox3.SelectedIndex != 4) { h += placing1_h(); }//1 else if (textBoxX.Text == "1" & comboBox3.SelectedIndex == 4) { h += placing1_h(); }//1 if (comboBox3.SelectedIndex == 3 & textBoxX.Text == "2") { h += 40; } if (comboBox3.SelectedIndex == 4 & textBoxX.Text == "2") { h += 30; } if (comboBox3.SelectedIndex == 2 & textBoxX.Text == "2") { h += 60; } if (comboBox3.SelectedIndex == 0 & textBoxX.Text == "2") { h += 80; } if (comboBox3.SelectedIndex == 1 & textBoxX.Text == "2") { h += 60; } if (comboBox3.SelectedIndex == 1 & textBoxX.Text == "3") { h += 20; } if (comboBox1.SelectedIndex == 3 && textBoxX.Text == "3" && comboBox3.SelectedIndex == 1) { h -= 5; } if (comboBox3.SelectedIndex == 0 & textBoxX.Text == "3") { h += 20; } if (comboBox3.SelectedIndex == 0 & textBoxX.Text == "5") { h+=5; } e.HasMorePages = true; e.Graphics.DrawString(textBoxResult.Lines[c].ToString(), font, Brushes.Black, new Point(h + mikos, p)); ///MessageBox.Show(p+" --- "); if (e.HasMorePages = p > e.PageBounds.Bottom) { e.HasMorePages = true; break; } if ((comboBox3.SelectedIndex == 2 & textBoxX.Text == "3")) { h += placing3_h(); }//2 if ((comboBox3.SelectedIndex == 2 & textBoxX.Text == "4")) { h += placing4_h(); }//2 if ((comboBox3.SelectedIndex == 2 & textBoxX.Text == "2")) { h += placing2_h(); }//2 if (comboBox3.SelectedIndex == 3 & textBoxX.Text == "3") { h += placing3_h(); }//3 if (comboBox3.SelectedIndex == 3 & textBoxX.Text == "2") { h += placing2_h(); }//γινεται υπερκαλυψη δεν μπορει να χωρεσει αλλο if (comboBox3.SelectedIndex == 0 & textBoxX.Text == "2") { h += placing2_h(); }//0 if (comboBox3.SelectedIndex == 0 & textBoxX.Text == "3") { h += placing3_h(); }//0 if (comboBox3.SelectedIndex == 0 & textBoxX.Text == "4") { h += placing4_h(); }//0 if (comboBox3.SelectedIndex == 0 & textBoxX.Text == "5") { h += 160; }//0 if (comboBox3.SelectedIndex == 4 & textBoxX.Text == "2") { h += placing2_h(); }//4 if (comboBox3.SelectedIndex == 4 & textBoxX.Text == "3") { h += placing3_h(); }//4 if (comboBox3.SelectedIndex == 1 & textBoxX.Text == "2") { h += placing2_h(); } if (comboBox3.SelectedIndex == 1 & textBoxX.Text == "4") { h += placing4_h(); } if (comboBox3.SelectedIndex == 1 & textBoxX.Text == "3") { h += placing3_h(); }//1 c++; } } } if (comboBox3.SelectedIndex == 0 & textBoxX.Text == "5") { h = 10; } else { h = 20; } p += 100 + height; e.HasMorePages = false; }
private void preview(PrintDocument doc) { try { PrintPreviewDialog printDialog = new PrintPreviewDialog(); printDialog.Document = doc; printPreviewDialog1.PrintPreviewControl.StartPage = 1; printPreviewDialog1.PrintPreviewControl.Columns = 3; // doc.EndPrint += doc_EndPrint; // Subscribe to EndPrint event of your document here. printDialog.ShowDialog(); } catch (System.ArgumentException ex) { } }
Maciej Los
Я бы изменилсяif (e.HasMorePages = p > e.PageBounds.Bottom)
{
e.HasMorePages = true;
break;
}
с:if (p > e.MarginBounds.Bottom)
e.HasMorePages = true;
Member 12221464
По-прежнему никаких результатов ... Вы хотите отправить вам проект ?
Maciej Los
Пожалуйста, не надо.
Вы должны отладить свою программу, чтобы выяснить, где проблема...
Member 12221464
Проблема в том, что метод печати не продолжает генерировать штрих-коды на следующей странице, поэтому я вижу только первый ...
это код из метода, который отправляет информацию для предварительного просмотра
док.В Команде Printpage += Doc_PrintPage2;
др.AllowSelection = истина;
др.AllowSomePages = истина;
др.Документ = док;
предварительный просмотр(doc);
Это оператор if, который я поместил внутри цикла for после e.Graphics.шнурок
if (p < e.MarginBounds.Дно)
{
e.HasMorePages = false;
i += 1;
}
еще
{
i = 0;
е.HasMorePages = истина;
вернуть;
}
Maciej Los
Проверьте свою логику:
if (p < e.MarginBounds.Bottom)
{
e.HasMorePages = false;
i += 1;
}
else
Что касается меня, то так и должно быть:
if (p > e.MarginBounds.Bottom)
{
e.HasMorePages = true;
i += 1;
}
else