Печать нескольких страниц с разными данными - PullRequest
3 голосов
/ 13 января 2009

В моем приложении есть несколько форм, которые печатают определенные данные. Для этого я использую событие PrintDocument PrintPage.

Если в одном отчете содержится более 1 страницы, я устанавливаю флаг hasMorePages в значение true, и событие запускается снова, и я обязан продолжить печать с того места, где находился в конце последней страницы.

Теперь мне нужно распечатать все эти отчеты в ОДНОМ PrintDocument, и я хочу повторно использовать код каждого из них, чтобы за одну кнопку печати пользователь мог распечатать все отчеты. Идея состоит в том, чтобы не печатать несколько документов.

Каков ваш подход к этому?

1 Ответ

2 голосов
/ 13 января 2009

Хотя мне не очень нравится ощущение этого, очевидным решением является создание события печати, которое является агрегатором других событий печати. Вы подключаетесь к событиям печати документа и для каждого элемента, который необходимо распечатать, вы вручную запускаете его события печати. ​​

Я думаю, вы захотите создать интерфейс, такой как IPrintableForm, который имеет метод DoPrintEvent (отправитель объекта, PrintPageEventArgs args);

тогда ваш агрегатор получает стек форм, которые необходимо распечатать, сохраняет его в переменной экземпляра и делает что-то вроде:

private multiDocPageEventHandler(object sender, PrintPageEventArgs args)
{
    if (printStack == null) { // all done
        throw new Exception("This should never happen.");
    }
    else { // send to top of stack
        printStack.Peek().DoPrintEvent(sender, args);
        if (!args.HasMorePages) {
             printStack.Pop();
        }
        args.HasMorePages = printStack.Count > 0;
        if (!args.HasMorePages) {
            printStack = null;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...