Foxtable(狐表)用户栏目专家坐堂 → [求助] 编辑器代码着色


  共有2728人关注过本帖树形打印复制链接

主题:[求助] 编辑器代码着色

帅哥哟,离线,有人找我吗?
lsy
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
[求助] 编辑器代码着色  发帖心情 Post By:2016/2/18 9:46:00 [显示全部帖子]

代码编辑器中,代码字符分类着色,能增强代码的可读性,没这功能也可以,但显得不专业。
边输入边着色,比较容易,代码简单,也不影响输入速度,因为输入过程中要做很多判断,着色只是在已有判断的基础上的顺带功能。

这样的着色,在代码重排或者代码是粘贴进来的或者是打开文件加载进来的,就不会起作用。

从狐表的着色效果看,也算不错了,只是有点不完美:
有时不能着色,有时误着色,特别是在双引号、单引号比较多的时候,不但影响着色,还影响代码精灵的判断。
感觉还能影响代码输入速度。

现在想用一个按钮,手工点击,使代码分类着色,与其他的功能分开,这样不会影响输入速度。

代码着色是逐行进行的,只要解决一行代码的着色就解决问题了。

求教高效的着色代码,不管什么方式,有效、高效,就行。

注:编辑器是用RichTextBox控件制作的。

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2016/2/18 9:51:00 [显示全部帖子]

关键就在于分隔符,只用空格做分隔符,是不能满足要求的。
为了使代码输入更灵便,分隔符种类越多越好。

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2016/2/18 9:53:00 [显示全部帖子]

还有,在按钮中写代码,为什么只对背景颜色有效,对字符颜色无效?

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2016/2/18 9:55:00 [显示全部帖子]

比如这段代码,放在TextChanged事件中有效,在按钮中就无效了:
If Selected_Text.Trim.StartsWith("'") Then
    start = _rtx.SelectionStart
    _rtx.SelectionStart = First_Index
    _rtx.SelectionLength = Selected_Text.Length
    _rtx.SelectionColor = Color.Gray
    _rtx.SelectionStart = start
Else
    Dim Type_str As String() = DataTables("代码格式化嫦娥").GetComboListString("VB类型","VB类型 Is Not Null").Split("|")
    Dim Key_str As String() = DataTables("代码格式化嫦娥").GetComboListString("VB关键","VB关键 Is Not Null").Split("|")
    start = _rtx.SelectionStart - old_s.Length
    If start < 0 Then
        _rtx.SelectionStart = 0
    Else
        _rtx.SelectionStart - = old_s.Length
    End If
    _rtx.SelectionLength = old_s.Length
    If Array.IndexOf(Type_str,old_s) > - 1 Then
        _rtx.SelectionColor = Color.Violet
    ElseIf Array.IndexOf(Key_str,old_s) > - 1 Then
        _rtx.SelectionColor = Color.Blue
    ElseIf IsNumeric(old_s) Then
        _rtx.SelectionColor = Color.Green
    Else
        _rtx.SelectionColor = Color.Black
    End If
    _rtx.SelectionStart + = old_s.Length
End If
_rtx.SelectionLength = 0
_rtx.SelectionColor = Color.Black

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2016/2/18 9:59:00 [显示全部帖子]

写代码的人,对于空格并不总是很在意,比如逗号后面,往往就不留空格。

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2016/2/18 10:03:00 [显示全部帖子]

以下是引用大红袍在2016/2/18 9:57:00的发言:

你加入msgbox定位错误

 

选中对应的字符,然后才能设置颜色的。


肯定先选中了,不然背景颜色也不会设置成功。


[此贴子已经被作者于2016/2/18 9:56:52编辑过]


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2016/2/18 10:09:00 [显示全部帖子]

代码着色的原理,不复杂,硬凑也能实现功能,如果有现成的、效率又高的代码,当然更好。

RichTextBox控件的分类着色,网上有不少探讨,普遍反应效率低。

 回到顶部