C#PrintDocument已更改事件

Cor*_*ton 7 .net c# printdocument

我的问题是我创建了一个"扩展"的RichTextBox控件,它使用本机API添加标准控件中缺少的许多RichEdit功能(即:修改选择的单个字体属性,而不更改其他字体属性,自动换行到打印机[如写字板]等).作为控件的一部分,我公开了一个PrintDocument,用于打印RichTextBox的格式化内容.当wordwrap设置为"Wrap To Printer"时,我将EM_SETTARGETDEVICE消息发送到RichTextBox,并使其换行到适当的长度.

当某些内容(用户/代码)更改了我的控件的WordWrap属性时,这一切都正常.但是,如果之后修改了PrintDocument,我无法知道它.因此,即使用户可能更改了PrintDocument上的边距,我的RichTextBoxEx也不会为更新的宽度重新发送EM_SETTARGETDEVICE,直到WordWrap属性发生更改.

我看到了一些可以克服这一点的选择,但我不是他们中的任何一个的忠实粉丝.这就是我所拥有的:

  1. 添加一个UpdatePrintDocument()方法或类似的方法,需要在控件外部的东西之后调用(即:父窗体上的PageSetupDialog)更新PrintDocument中的设置.缺点:我将分发控件,所以我想让它尽可能友好.虽然我可能记得在我成功更新PrintDocument设置时随时调用该方法,但其他人可能不会.亲:实施起来很简单.

  2. 创建一个新的PrintDocumentEx类,它基于PrintDocument并实现所需的"Changed"事件.缺点:可能还不够,可能需要创建PrintSettingsEx,PageSettingsEx等.Pro:实施一次,没有人再担心它.

我真的认为#2是我必须选择的选项但是对于下一个实例它不是非常可重用我需要一些类似的功能.我想我正在寻找的是一种将"通用PropertyChanged事件"附加到任何现有类属性的方法,因为这将适用于未来的情况.急于看到你们对我有什么:-)

Cor*_*ton 1

只是跟进我的 PrintDocumentEx (和相关的)类不起作用。查看 PrintDialog 和相关控件,这是因为它们使用本机方法来实际更新 PrintDocument。因此,我附加到“Ex”类中的属性的事件从未触发,因为从未调用 set 访问器。