vb6里RichTextBox控件Find方法的奇葩BUG

从网上搜索到一个快速搜索字符串的方法,使用RichTextBox的Find方法,发现速度真的很快。

使用它做了个多文件搜索的小工具,才发现就没见过这么奇葩的控件。

语法:object.Find(string, start, end, options)

部分描述
object必需的。对象表达式,其值是“应用于”列表中的一个对象。
string必需的。要在控件中查找的字符串表达式。
start可选的。决定从哪儿开始搜索的整数字符索引。控件中的每一个字符都有一个可唯一标识的整数索引。控件中文本的第一个字符的索引是 0。
end可选的。决定在哪儿结束搜索的整数字符索引。
options可选的。用来指定一个或多个可选功能常数的和。所指定的功能如“设置值”中所述。

设置值

options 的设置值包括:

常数描述
rtfWholeWord2确定匹配是基于整个单词还是单词的片段。
rtfMatchCase4确定匹配是否基于指定字符串与字符串文本的大小写字体一致。
rtfNoHighlight8确定匹配是否在 RichTextBox 控件中突出显示。

感觉有rtfNoHighlight这个参数很好啊,找到后可以直接高亮显示,可是试了半天没有效果。这不是默认高亮吗?后来才发现,高亮居然需要焦点。

好吧,设置焦点果然可以高亮了,但是画面总闪一下。而且搜索到一个就锁住不动了。再看:

HideSelection 属性是 True、且 RichTextBox 控件没有焦点时,如果所使用的 Find 方法没有 rtfNoHighlight 选项,则控件仍然突出显示所找到的文本。此后使用 Find 方法,若插入点不移动,将只搜索突出显示的文本。

好吧,设置 HideSelection 属性是False,取消设置焦点,就不闪也能高亮了。

可是,当.SelStart在关键词前、关键词中、关键词尾时,都会搜索回当前键词位置。

即:关键词位置150,词长5, .SelStart  = 150,则搜索结果 = 150。.SelStart  = 152,搜索结果 = 150,……

.SelStart = .SelStart + 1  → 不好用

.SelStart = .SelStart + 2  → 好用了,继续,遇到回车符,不好用了

跟踪调试发现,.SelStart = 228, .SelStart + 2 = 229 ?!

好吧,我 + 3。.SelStart + 3 = 231 …… 无语。+ 3 好用了,再往下 …… 又不好用了。这里关键词后面跟的是空格。但是前面一模一样的段落是好用的啊。

+ 6 才好用。这比我关键词都长了,还怎么自动判断?

就这样吧。自己手动在后面点一下,再搜吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值