在UserControl上显示,选择和编辑文本

时间:2012-06-25 09:29:48

标签: c# .net custom-controls selection word-processor

我正在编写一个小文本编辑器,它应该具有非常基本的格式化功能,没有任何花哨,但比RichTextBox可以提供的更复杂(包括'页面'显示功能)。

但是,上次我写的任何文本编辑器都是用于Windows 3.1的C语言中的WinAPI。我不知道如何用.NET来解决这个问题。我得到了进一步的空白,直到空白使用TextRenderer.DrawText()将我所拥有的文本输出到一个矩形......但是有些东西告诉我在这种情况下不是这样的,因为我一直以为首先,我想要XML格式的背景文本...虽然我可以用标签分解段落,但我不知道如何进行格式化,例如或不同的字体系列,所以它可能需要接近一点点。可能每个单独的单词。我是否必须将每个单词保存在一个数组中(尊重xml标记)并将其作为一个单独的控件绘制,以保持其在数组中的位置?如果我们在一个文件中谈论成千上万的单词,这听起来像是一个非常大的记忆和绘图能力(这是一种可能性,虽然我高度怀疑一个文件将超过20000个单词,但是任何事情都可以和单词一起使用点(格式化只适用于完整的单词,所以不用担心)它可能会随着内存的使用而变得非常大,我并不特别喜欢这种情况。

所以...我正在寻找的是一些提示和提示(我不能使用Tx文本编辑器,DevExpress或Telerik的RichTextEditors有充分的理由加上它们的价格)。以最正确的方式构建一个可以用C#.NET扩展的“文字处理器”,因为这是我迄今为止从未有过的一件事。

基本上:

1)将文本绘制到自定义控件中的最佳方法。我该如何保留我的文字?在加载文件时,我可能会使用基本Text属性进行预格式化阶段。或者我可能会用我的自定义XML类扩展它?在使用退格时,我应该保持按顺序排列的字样并手动连接吗?等等。

2)做出选择的最佳方式(可能只有我认为的一种方式?),而在WinAPI中我可以检测光标下的字符,因为它是标准文本,考虑到字体的数量和窗口绘制字符的方式我要么必须要OCR然后开始计算位置...所以我认为有更好的方法来选择文本?

3)编辑文本 - 一旦我有光标位置,我认为这很简单。

为阅读而欢呼......希望有人能提出比我微弱的DrawText更好的解决方案......这不是真正的解决方案。

1 个答案:

答案 0 :(得分:0)

如果您希望在WPF中创建功能更全面的文本编辑器,您可能需要从this示例开始并从那里开始工作。