【问题标题】:C# PrintDocument Changed eventC# PrintDocument 更改事件
【发布时间】:2009-12-09 01:35:11
【问题描述】:

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

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

我看到了一些克服这个问题的选择,但我不是其中任何一个的忠实粉丝。这是我所拥有的:

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

  2. 创建一个新的 PrintDocumentEx 类,该类基于 PrintDocument 并实现所需的“已更改”事件。缺点:可能还不够,可能需要创建 PrintSettingsEx、PageSettingsEx 等。优点:实施一次,无需再担心。

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

【问题讨论】:

  • 时间是问题,所以我继续并开始实施 PrintDocumentEx。正如我所期望的那样,WinForms 打印对话框不会创建新的 PageSettings、PrinterSettings 等,而是修改现有属性,因此我需要为所有对象创建“Ex”类,并将每个叶子属性的“Changed”事件冒泡回 PrintDocumentEx .这很讨厌,但它的进步。仍然很想看看我是否缺少更通用的解决方案。
  • 只是跟进我的 PrintDocumentEx(和相关)分类不起作用。查看 PrintDialog 和相关控件是因为它们使用本机方法来实际更新 PrintDocument。因此,我附加到“Ex”类中的属性的事件从未触发,因为从未调用过 set 访问器。现在我使用了 UpdatePrintDocument() 方法,但仍在寻找更好的解决方案。
  • 有趣的是,我可以将一个无用的问题(一个有悬赏但答案未被接受的问题)发布为社区 wiki 帖子。

标签: c# .net printdocument


【解决方案1】:

如果我正确理解了您的问题,您需要的信息会在 WordWrap 属性更改时发送。

当其他事情发生变化时,不会有任何事件更新打印文档。下次更改 WordWrap 属性时会发送所有信息。

解决此问题的黑客方法是在更改要发送到打印文档的属性时更改 WordWrap 属性。把它改成一个临时值,然后再改回来。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的,你做到了:Bounty creation of 100 rep on question id = 1871103 Dec 15 at 4:49
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多