1

我正在尝试为所见即所得编辑创建一个简单的文本字段。但是,我只想允许某些类型的格式(例如粗体、斜体、下划线和单一的标题类型,但没有颜色或不同的字体。)

问题是如果我使用可以接受格式的编辑器,有人可以在另一个程序中创建或复制格式化文本,然后只需将其粘贴到文本字段中,所有格式都会随之而来,允许我不感兴趣的东西,比如作为不同的字体、颜色等。我不想允许这样。

充其量,我想自动删除我不支持的任何格式。在最坏的情况下,我想简单地将任何内容粘贴为纯文本,使他们不得不重新格式化。但在任何情况下,我都不想将剪贴板转储到文本区域。

关于如何做到这一点的任何想法?

4

2 回答 2

1

您可以通过在 KeyDown 事件中拦截粘贴来自己拦截粘贴。然后,您可以自己解析它。这可能有点棘手,但我认为这是你能做到的唯一方法。

在粘贴后解析生成的 StyleRun 并去除您不想要的格式可能会更容易。

或者,您可以查看 True North Software 的格式化文本控件并覆盖控件的粘贴方法(您获得所有源代码)并自己处理。

无论哪种方式,我认为这将是相当多的工作。

于 2011-11-20T06:03:14.377 回答
1

我建议创建一个新的文本字段/文本区域类并创建一个 EditPaste 菜单处理程序,该处理程序 (a) 在处理剪贴板文本方面执行您正在寻找的操作,并且 (b) 返回 true 以防止发生默认粘贴。这比使用 Key down 事件更安全,因为用户可能会从编辑菜单中手动选择粘贴。

您可以通过创建剪贴板对象来访问剪贴板上的文本。

要子类化文本字段并拦截粘贴菜单命令:

  1. 打开项目后,转到项目菜单 > 添加 > 类
  2. 在项目选项卡中选择新类,并在属性面板中将 super 设置为 TextField
  3. 双击类进行编辑
  4. 单击班级中的“添加菜单处理程序”中间工具栏按钮
  5. 将菜单项名称更改为“EditPaste”。将您的代码放在“return true”之前,并确保将 return true 保留在那里。

然后,您的代码可以手动格式化和粘贴文本并覆盖默认粘贴功能。

该文本字段中的任何 command-V 或 control-V 都会导致该菜单处理程序触发。无论如何,您都会添加任何上下文菜单,因为真正的基本不会创建默认的上下文菜单,因此您也可以控制它。

要将文本字段添加到窗口,只需将对象列表上方的过滤器更改为项目控件,然后将类从那里拖入。

于 2011-12-10T19:51:43.343 回答