Моя проблема - то, что я создал "расширенное" управление RichTextBox, которое использует встроенный API для добавления многих опций RichEdit, которые отсутствуют в стандартном управлении (т.е.: изменяя единственное свойство шрифта на выборе w/o изменение других свойств шрифта, перехода на новую строку к принтеру [как WordPad], и т.д.). Как часть управления я подвергаю PrintDocument, который используется для печати отформатированного содержания RichTextBox. Когда переход на новую строку установлен "Перенести К Принтеру" меня SendMessage сообщение EM_SETTARGETDEVICE к RichTextBox и заставить это переноситься к соответствующей длине.
Это все хорошо работает, когда что-то (пользователь/код) изменяет свойство WordWrap моего управления. Однако, если PrintDocument изменяется после этого, у меня нет способа знать это. Таким образом даже при том, что пользователь, возможно, изменил поля на PrintDocument, мой RichTextBoxEx не снова посылает EM_SETTARGETDEVICE для новой ширины, пока свойство WordWrap не изменяется.
Я вижу несколько опций преодолеть это, но я не большой поклонник ни одного из них. Вот то, что я имею:
Добавьте UpdatePrintDocument () метод или подобный, который должны были бы назвать после чего-то внешнего от управления (т.е.: PageSetupDialog на родительской форме), обновил настройки в PrintDocument. Недостатки: я буду распределять управление, таким образом, я хотел бы сделать его максимально дружественным. В то время как я могу не забыть называть метод каждый раз, когда я успешно обновляю настройки PrintDocument, кто-то еще не мог бы. Pro: просто реализовать.
Создайте новый, класс PrintDocumentEx, который базируется от PrintDocument и реализует необходимые события "Changed". Недостатки: не Мог бы быть достаточно, возможно, должен был бы создать PrintSettingsEx, PageSettingsEx, и т.д. Pro: Реализация однажды и никто не должен волноваться об этом снова.
Я действительно думаю, что № 2 является опцией, с которой я оказываюсь перед необходимостью идти, но это не является очень допускающим повторное использование для следующего экземпляра, мне нужна некоторая подобная функциональность. Я предполагаю то, что я ищу, способ присоединить "универсальное событие PropertyChanged" к любому существующему свойству классов, так как это было бы применимо в будущих ситуациях. Стремясь видеть то, что Вы парни имеете для меня :-)
Сразу хочу сказать, что мой класс PrintDocumentEx (и связанный с ним) не работал. Если посмотреть на PrintDialog и связанные элементы управления, это связано с тем, что они используют собственные методы для фактического обновления PrintDocument. Таким образом, события, которые я прикрепил к свойствам в моих "Ex" классах, никогда не запускались, потому что метод доступа set никогда не был вызван.
Если я правильно понял ваш вопрос, необходимая вам информация отправляется, когда свойство WordWrap установлено изменено.
Когда изменяются другие параметры, никакие события не обновляют документ для печати. При следующем изменении свойства WordWrap будет отправлена вся информация.
Хакерский способ исправить это - изменить свойство WordWrap всякий раз, когда вы измените свойство, которое вы хотите отправить в документ для печати. Измените его на временное значение, затем снова измените его.