gpt4 book ai didi

C# PrintDocument 更改事件

转载 作者:太空狗 更新时间:2023-10-29 20:38:00 26 4
gpt4 key购买 nike

我的问题是我创建了一个“扩展的”RichTextBox 控件,该控件使用 native 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 并实现所需的“已更改”事件。缺点:可能还不够,可能需要创建 PrintSettingsEx、PageSettingsEx 等。优点:实现一次,无需再担心。

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

最佳答案

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

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

解决此问题的黑客方法是更改​​ WordWrap 属性,每当您更改要发送到打印文档的属性时。将其更改为临时值,然后再将其更改回来。

关于C# PrintDocument 更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1871103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com