Событие C# PrintDocument Changed

Моя проблема - то, что я создал "расширенное" управление RichTextBox, которое использует встроенный API для добавления многих опций RichEdit, которые отсутствуют в стандартном управлении (т.е.: изменяя единственное свойство шрифта на выборе w/o изменение других свойств шрифта, перехода на новую строку к принтеру [как WordPad], и т.д.). Как часть управления я подвергаю PrintDocument, который используется для печати отформатированного содержания RichTextBox. Когда переход на новую строку установлен "Перенести К Принтеру" меня SendMessage сообщение EM_SETTARGETDEVICE к RichTextBox и заставить это переноситься к соответствующей длине.

Это все хорошо работает, когда что-то (пользователь/код) изменяет свойство WordWrap моего управления. Однако, если PrintDocument изменяется после этого, у меня нет способа знать это. Таким образом даже при том, что пользователь, возможно, изменил поля на PrintDocument, мой RichTextBoxEx не снова посылает EM_SETTARGETDEVICE для новой ширины, пока свойство WordWrap не изменяется.

Я вижу несколько опций преодолеть это, но я не большой поклонник ни одного из них. Вот то, что я имею:

  1. Добавьте UpdatePrintDocument () метод или подобный, который должны были бы назвать после чего-то внешнего от управления (т.е.: PageSetupDialog на родительской форме), обновил настройки в PrintDocument. Недостатки: я буду распределять управление, таким образом, я хотел бы сделать его максимально дружественным. В то время как я могу не забыть называть метод каждый раз, когда я успешно обновляю настройки PrintDocument, кто-то еще не мог бы. Pro: просто реализовать.

  2. Создайте новый, класс PrintDocumentEx, который базируется от PrintDocument и реализует необходимые события "Changed". Недостатки: не Мог бы быть достаточно, возможно, должен был бы создать PrintSettingsEx, PageSettingsEx, и т.д. Pro: Реализация однажды и никто не должен волноваться об этом снова.

Я действительно думаю, что № 2 является опцией, с которой я оказываюсь перед необходимостью идти, но это не является очень допускающим повторное использование для следующего экземпляра, мне нужна некоторая подобная функциональность. Я предполагаю то, что я ищу, способ присоединить "универсальное событие PropertyChanged" к любому существующему свойству классов, так как это было бы применимо в будущих ситуациях. Стремясь видеть то, что Вы парни имеете для меня :-)

7
задан 2 revs 14 December 2009 в 23:46
поделиться

2 ответа

Сразу хочу сказать, что мой класс PrintDocumentEx (и связанный с ним) не работал. Если посмотреть на PrintDialog и связанные элементы управления, это связано с тем, что они используют собственные методы для фактического обновления PrintDocument. Таким образом, события, которые я прикрепил к свойствам в моих "Ex" классах, никогда не запускались, потому что метод доступа set никогда не был вызван.

1
ответ дан 7 December 2019 в 18:43
поделиться

Если я правильно понял ваш вопрос, необходимая вам информация отправляется, когда свойство WordWrap установлено изменено.

Когда изменяются другие параметры, никакие события не обновляют документ для печати. ​​При следующем изменении свойства WordWrap будет отправлена ​​вся информация.

Хакерский способ исправить это - изменить свойство WordWrap всякий раз, когда вы измените свойство, которое вы хотите отправить в документ для печати. ​​Измените его на временное значение, затем снова измените его.

1
ответ дан 7 December 2019 в 18:43
поделиться
Другие вопросы по тегам:

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