我正在尝试为WYSIWYG编辑创建一个简单的文本字段。但是,我只想允许某些类型的格式化(例如粗体,斜体,下划线和单个标题类型,但没有颜色或不同的字体。)
问题是,如果我使用可以接受格式化的编辑器,有人可以在另一个程序中创建或复制格式化文本,然后只需将其粘贴到文本字段中,所有格式化随之而来,允许我不感兴趣的事情in,例如不同的字体,颜色等。我不想允许。
充其量,我想自动删除任何我不支持的格式。在最坏的情况下,我想简单地将任何内容粘贴为纯文本,因为它们必须重新格式化。但在任何情况下,我都不想将剪贴板转储到文本区域。
关于如何做到这一点的任何想法?
答案 0 :(得分:1)
您可以通过在KeyDown事件中拦截粘贴来自行拦截粘贴。然后,你可以自己解析它。这可能有点棘手,但我认为这是你能做到的唯一方法。
在粘贴并删除不需要的格式后,解析生成的StyleRun可能会更容易。
或者,您可以查看True North Software的格式化文本控件并覆盖控件的粘贴方法(获取所有源代码)并自行处理。
无论哪种方式,我认为这将是一项相当多的工作。答案 1 :(得分:1)
我建议创建一个新的文本字段/文本区域类并创建一个EditPaste菜单处理程序,它(a)在处理剪贴板文本方面做你正在寻找的东西,(b)返回true以防止默认粘贴从发生。这比使用按键事件更安全,因为用户可以从编辑菜单中手动选择粘贴。
您可以通过创建剪贴板对象来访问剪贴板上的文本。
要对文本字段进行子类化并截取粘贴菜单命令:
然后,您的代码可以手动格式化和粘贴文本,并覆盖默认的粘贴功能。
该文本字段中的任何命令-V或control-V都将导致该菜单处理程序触发。无论如何,您都会添加任何上下文菜单,因为真正的基本菜单不会创建默认的上下文菜单,因此您也可以控制它。
要将文本字段添加到窗口,只需将对象列表上方的过滤器更改为“项目”控件,然后从中拖动该类。