网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C# > 正文
用C#编写文本编辑器详解
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/14
下载{$ArticleTitle}原创论文样式
方法来实现自己的最后对象
  • IsLastElement 函数,该函数参数为一个TextElement对象,本函数返回指定的TextElement对象是否是最后对象,程序在删除子元素前都有调用该函数,若要删除的元素为最后元素则不应当删除
  •   TextContainer对象还重载RefreshSize方法来重新计算所有子元素的显示大小,此外还定义了新的虚方法RefreshLine来进行分行处理,为了方便分行处理,还定义了文档行对象TextLine,文档行对象用于保存文档内容分行信息,当文档分行完毕而内容没有发生改变时重新绘制文档内容时就无需重新计算要显示的内容的坐标,文档行对象的成员有

    • LineSpacing 行间距,也就是本文档行下端和下文本行上端的距离
    • Elements 属于该文档行的所有的文档元素的集合,该属性为了编程方便
    • FirstElement 本文档行第一个元素
    • LastElement 文档行最后一个元素
    • RealLeft , RealTop 文档行左上角在文档视图区域中的位置
    • Container 本文档行所在的容器对象
    • ContentWidth 本文档行所有元素的宽度和

       为了保存分行信息,TextContainer对象还定义了一个Lines只读属性,该属性返回System.Collections.ArrayList对象列表,该列表元素为属于该容器的所有文本行对象,容器对象执行RefreshLine进行分行的步骤为

    • 将文本行集合Lines清空
    • 设置所有参与分行的元素集合
    • 从前到后的遍历所有的参与分行的元素集合中的所有子元素
    • 若子元素对象为制表符或水平线对象则重新计算它的宽度
    • 若子元素为一个容器对象则调用它的RefreshLine方法
    • 向当前行的元素列表中添加元素,并累计元素的宽度和,若宽度和大于容器显示宽度(我们称为情况1)或者当前元素单独占据一行则取消向当前行添加元素并结束当前行
    • 若当前元素是强制换行的则结束当前行
    • 在结束当前行前,若当前元素不能出现在行尾或者下一个元素不能出现在行首则取消向当前行添加当前元素(这也算情况1)。按照书写惯例,某些字符例如!),.:;?]}¨·ˇˉ―‖’”…∶、。〃々〉》」』】〕〗!"'),.:;?]`|}~¢是不能显示在行首,而另外一些字符例如([{·‘“〈《「『【〔〖(.[{£¥是不能显示在行尾,此外在某些特定的应用中可能还有其他类型的元素也出现这种情况,这些情况需要考虑。为此在基础元素对象类型TextElement中定义了方法 CanBeLineHead 来判断元素对象是否可以出现在行首,定义了方法CanBeLineEnd来判断元素对象是否可以出现在行尾,这样字符元素对象和其他元素对象可以重载这两个方法来进行所需的判断。在进行这样的判断要特别的小心,若容器显示宽度比较小则有可能由于这种判断而导致死循环,因此还需要额外的进行反死循环的判断(当年为了发现这个错误而呕出了几十两血)。
    • 在结束当前行时需要计算文档元素在当前行中的相对位置,若当前行是由于情况1而导致结束的则需要修正元素间距,由于文档行所有元素的宽度和不一定等于容器的显示宽度,因此若没有进行修正则文档的右边缘参差不齐,影响美观,因此需要计算元素宽度和和容器的显示宽度之差,将该宽度差比较均匀的插入到各个文档元素之间,这样文档的右边缘则比较整齐。为了保存这个修正值,在TextElement中新增一个WidthFix属性来保存该值。其实大家可以观察到IE显示文档内容时没有进行右边缘的修正而Word则进行了类似的修正
    • 若当前行是由于最后一个元素强制分行而结束的则无需进行由于情况1而导致的右边缘修正,但计算文档元素位置时需要进行文档对齐方式的修正。首先找到影响当前文本行的段落对象,获得它的对齐方式设置(左对齐,右对齐,居中对齐),根据对齐方式来计算元素见的空白,然后设置元素的WidthFix属性
    • 此外还需要修正元素在文档行中的顶端坐标,由于同一行的文档元素
  • 上一篇资讯: 在C#中实现串口通信
  • 下一篇资讯: 用Visual C#做DLL文件
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号