Задать вопрос
gloomkolomna
@gloomkolomna
c#, WPF

Почему печать происходит два раза подряд?

Здравствуйте.
Есть две кнопки и одно и тоже событие для печати файла.
Но на одной кнопке (btnPrintDetails) печатает нормально, а со второй (btnPrint) - по два и более раз (как буд-то несколько раз нажимается кнопка).
Пишу следующее:

Button btnPrint = new Button();
private void DetailsViews(TableLayoutPanel tblDetails)
{
...
Button btnPrintDetails = new Button();
...
btnPrintDetails.Click += new EventHandler(btnPrintDetailsClick);
}

private void dropDownClosedYearMonth(object sender, EventArgs e)
{
...
btnPrint.Text = "Распечатать";
btnPrint.Click += new EventHandler(btnPrintClick);
btnPrint.Height = _buttonHeight - 30;
btnPrint.FlatStyle = FlatStyle.System;
btnPrint.Dock = DockStyle.Top;
btnPrint.Visible = true;
}

private void btnPrintDetailsClick(object sender, EventArgs e)
        {
// тут еще код для кнопки 1
........
            PrintDocument _print = new PrintDocument();

            _print.DocumentName = docname;
            _print.PrintPage += new PrintPageEventHandler(printPage);
            _print.DefaultPageSettings.Margins = new Margins(3, 3, 3, 3);
            _print.Print();
        }

void btnPrintClick(object sender, EventArgs e)
        {
// тут еще код для кнопки 2
....
                PrintDocument _print = new PrintDocument();

                _print.DocumentName = docname;
                _print.PrintPage += new PrintPageEventHandler(printPage);
                _print.DefaultPageSettings.Margins = new Margins(3, 3, 3, 3);
                _print.Print();

        }

        private void printPage(object sender, PrintPageEventArgs e)
        {
            Font font = new Font("Arial", 12);

            string stringToPrint = System.IO.File.ReadAllText(docname, Encoding.UTF8);

            int charactersOnPage = 0;
            int linesPerPage = 0;

            e.Graphics.MeasureString(stringToPrint, font, e.MarginBounds.Size, StringFormat.GenericTypographic, out charactersOnPage, out linesPerPage);
            e.Graphics.DrawString(stringToPrint, font, Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic);
            stringToPrint = stringToPrint.Substring(charactersOnPage);

            e.HasMorePages = (stringToPrint.Length > 0);
        }
  • Вопрос задан
  • 2442 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
aush
@aush
private void dropDownClosedYearMonth(object sender, EventArgs e)
{
    btnPrint.Click += new EventHandler(btnPrintClick);
}


На каждый dropDownClosedYearMonth вы добавляете новый хендлер btnPrintClick. Соответственно, сколько раз у вас вызовется dropDownClosedYearMonth, столько раз потом отправится на печать при нажатии btnPrint. Почему вы инициализируете btnPrint в dropDownClosedYearMonth, а не в конструкторе формы?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы