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


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

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

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


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

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

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

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

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

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

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

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

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/18 9:49:00 [只看该作者]

 用空格分隔各个字符,如果是关键字,就着色不就行了?


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


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

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

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


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

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

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/18 9:54:00 [只看该作者]

 分隔符可以任意多个啊。

 

Dim str As String = "dim a as string = CurrentTable.name"
For Each s As String In str.split( new Char() {" ", "."})
    output.show(s)
Next


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/18 9:57:00 [只看该作者]

你加入msgbox定位错误

 

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

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

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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/18 10:03:00 [只看该作者]

 代码那里,肯定是必须有分隔符的啊,或空格或点或回车 等等,分割开来就行啊
[此贴子已经被作者于2016/2/18 10:02:45编辑过]

 回到顶部
总数 13 1 2 下一页