网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C# > 正文
用C#编写文本编辑器详解
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/14
下载{$ArticleTitle}原创论文样式
ment,因此在此提出动作这个概念。动作就是一个实现某种文档操作的类型,该类型有统一的接口,并使用TextDocument或其他对象提供的基本的操作来实现比较复杂的操作。为此定义动作基础类EditorAction,该类为抽象类,它的主要接口有

  • HotKey 字段,动作对应的热键代码,动作对象初始化的时候设置该动作对应的热键
  • KeyCode 字段,触发动作时的键盘按键编码
  • ShiftKey 字段,触发动作时的Shift键状态
  • ControlKey 字段,触发动作时的Control键状态
  • AltKey 字段,触发动作时的Alt键状态
  • MouseX,MouseY 字段,触发动作时的鼠标光标在视图区域中的坐标
  • MouseButton 字段,触发动作时的鼠标按键状态
  • Param1,Param2,Param3 字段,动作的参数,其意义由具体的动作决定
  • TestHotKey 函数测试键盘热键,本函数由文本编辑器调用来判断是否触发某动作
  • ActionName 只读属性,动作名称
  • isEnable 动作是否可用
  • Execute 执行动作
  • OwnerDocument 动作对象所操作的文档对象

   各种实际的动作对象都是从EditorAction派生的,若对象有热键则在初始化时设置HotKey字段,首先重载ActionName给定一个名称,然后重载Execute来实现各自的动作处理过程,还可根据需要重载isEnable或TestHotKey。

   在TextDocument中有个属性Actions,该只读属性为包含各种动作对象的列表,当TextDocument初始化时就初始化该动作对象列表,当文本编辑器获得输入焦点时按下键盘按键则程序会遍历Actions中所有的动作,进行热键判断,若命中热键则执行该动作,其他应用程序也可根据各个动作的isEnable属性来设置文本编辑功能按钮和相应菜单的可用性。

   比如定义复制动作对象EditorCopyAction,该类型从EditorAction派生的,重载ActionName使其返回"copy";重载isEnable,当文档有被选中的部分则返回True否则返回False,重载Execute来调用TextDocument中实现复制功能的函数,该对象初始化的时候设置HotKey为 System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C,这样定义了该动作的热键为Ctl+C。

   这种动作处理的模式还便于程序进行扩展,其他应用程序也可往动作列表中添加自定义的动作对象,这样文本编辑器就能自动应用该动作。应用程序还可修改各种动作的热键设置来实现用户操作的个性化。

派生对象

      定义了基础对象后就开始派生对象了,首先定义字符对象类型TextChar,一个文档内容中最主要的还是字符数据,在此为了实现方便,文档中每一个字符都是一个字符对象,字符对象重载了RefreshSize对象RefreshSize方法,用于根据当前绘制用的绘图对象(System.Drawing.Graph对象)的MeasureString来计算文字大小。注意默认情况下,该方法计算的字符串显示宽度后回额外的附加一些空白,为了计算实际的大小则使用System.Drawing.StringFormat.GenericTypographic参数。此外还有一个比较特殊的字符-制表符。这个字符的宽度是不固定的,需要在进行排版的时候才计算。

     字符对象(TextChar)还派生RefreshView方法,该方法比较简单,根据Left,Top值进行坐标转换后算出绘制地点,然后调用System.Drawing.Graph.DrawString方法即可。字符对象还定义了自己的成员,比如Char属性返回对象表示的字符数据,Font表示绘制对象使用的字体,ForeColor表示绘制文本的颜色。

    字符中的制表符比较特殊,因为它的宽度是不定的,而是根据它在文档视图中的位置而定的,因此在TextChar上在派生TextCharTab来转变处理这种情况,它新增了RefreshTabWidth方法,来根据对象在视图区域中的左端位置计算字符宽度。在此处我认定一个制表符步长等于四个下画线字符的宽度,制表符的右端坐标必须是制表符

  • 上一篇资讯: 在C#中实现串口通信
  • 下一篇资讯: 用Visual C#做DLL文件
  • 网学推荐

    免费论文

    原创论文

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