找回密码
 立即注册

QQ登录

只需一步,快速开始

yty

注册会员

14

主题

28

帖子

128

积分

注册会员

积分
128
yty
注册会员   /  发表于:2017-9-1 13:53  /   查看:2864  /  回复:1
本帖最后由 yty 于 2017-9-1 14:51 编辑

现有一需求如下。使用TextControl控件加载一文档,其分为若干段落。用户自由编辑该文档,我想在代码中获得用户修改了哪一个段落,并在内存中为该段落对象打上一个标记。举例说明,加载了一文档,包含5个段落,这时若遍历TextControl.Paragraphs属性,我可以获得5个Paragraph类的实例的引用。假设用户向第二段新增了一个字符,也就是第二段的任意内容被修改,我的需求就是,在代码中给第二个Paragraph实例以任何方式打上一个标记,表示其已被修改。在某一时点我将用到这些数据,例如我能获取到段落2、3已被修改。

实现此需求的方案与困难如下:
1. Paragraph类缺少一个类似Tag或UserData的属性,方便开发者把对象与任意自定义数据关联起来。
2. 若想自己实现一个Tag属性,考虑用Dictionary<Paragraph, MyTag>,但这要求Paragraph类能够可靠地引用到,但实际测试发现,每次遍历TextControl.Paragraphs得到的Paragraph实例是完全不同的全新实例,无法做到引用相等,甚至连续调用两次 TextControl.Paragraphs.GetItem[0] 所获取的两个实例是引用不等的,追踪不到引用,便无法实现自定义这个字典。
3. 我定义自己的类,例如class MyTaggedParagraph ,具有Index和Tag两个属性,每次用户编辑操作时,获取输入点位置,找到相应的类实例,并打上标签。但是实际上用户可进行的编辑操作种类实在太多了,比如大块的粘贴、选择大块区域后覆盖输入,很可能会影响到段落的增、删、移动;要追踪每一种操作对于段落对象集合的增、删、移动情况太多,算法复杂,几乎是不可能的。
综上,有没有好的办法能可靠地跟踪到段落对象,并能在编辑操作时为该段落对象打上标记?

1 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-9-1 23:31:50
沙发
控件本身Paragraph无法支持该功能,实际上我这边能想到的思路也就是这些,也没有其他更好的办法解决。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部