Обновление элементов управления при печати с использованием printdocument в Winforms - PullRequest
0 голосов
/ 28 декабря 2018

Я печатаю панель со всеми элементами управления внутри.Моя проблема в том, что я хочу создать счетчик внутри этой панели и увеличить его значение для каждой напечатанной страницы.Я попытался увеличить счетчик внутри своего события PrintPage, но это не работает.Можно ли добавить несколько событий печати страницы с увеличенным счетчиком для каждой страницы?Вот мой не рабочий код.Спасибо, что дали мне советы о том, как я могу сделать эту печать ...

 private void PrintPage(object o, PrintPageEventArgs e)

    {
        try
        {
            if (File.Exists(toPrint) && nbrPrint < nbrPages)
            {


                Rectangle m = panel1.ClientRectangle;


                Bitmap imaag = new Bitmap(m.Width, m.Height);
                panel1.DrawToBitmap(imaag, m);

                e.Graphics.DrawImage(imaag, e.MarginBounds);
                nbrPrint++;
                compteurPrint++;
                cpt.Text = compteurPrint.ToString();
            }
        }
        catch (Exception)
        {

        }
    }

nbrPrint - это напечатанные страницы, nbrPages - количество страниц, которые нужно напечатать, compteurPrint - значение, которое мне нужно напечатать на странице (который должен быть увеличен), cpt является меткой (внутри панели 1), в которой я показываю compteurPrint.

Поскольку я делаю это:

 pd.PrintPage += PrintPage;
 pd.Print();

Могу ли я сделать:

while (nbrPrint < nbrPages)
{
     pd.PrintPage += PrintPage;
     compteurPrint++;
}
pd.Print();

Я думаю, что это будет тот же результат, что я делаю сейчас ... Спасибо за помощь!

1 Ответ

0 голосов
/ 28 декабря 2018

Вам необходимо установить свойство HasMorePages на PrintPageEventArgs, чтобы сообщить, что есть еще несколько страниц для печати. ​​

private void PrintPage(object sender, PrintPageEventArgs e)
{
  try
  {
    if (File.Exists(toPrint) && nbrPrint < nbrPages)
    {
      Rectangle m = panel1.ClientRectangle;


      Bitmap imaag = new Bitmap(m.Width, m.Height);
      panel1.DrawToBitmap(imaag, m);

      e.Graphics.DrawImage(imaag, e.MarginBounds);
      nbrPrint++;
      compteurPrint++;
      cpt.Text = compteurPrint.ToString();
      e.HasMorePages = true; // Set this to true as long as there are more pages to print. It defaults to false.
    }
  }
  catch (Exception)
  {

  }
}

Изучите документацию Microsoft для примера: PrintDocument.PrintPage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...