VB 在RichTextBox 中查找目标字符串,并把该字符串所在的行显示到顶行

SmartBeanDad 2014-04-26 06:30:41
RichTextBox 中的内容行数大于其能显示的行数,我要做一个查询功能,输入要查询的字符串,然后定位到目标字符串所在的行,并且把该行显示在 RichTextBox 的顶行(能看见的显示内容的第一行,而不是能看见内容的最后一行,也不是所有内容的第一行),谢谢各位
...全文
479 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SmartBeanDad 2014-04-29
  • 打赏
  • 举报
回复
非常感谢 spt_petrolor 的关注。
我自己在网上找了一些方法把问题解决了,现将解决方案贴在下面,希望对其他网友有用

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SendMessageBynum& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
'先定义两个API函数,上面一个是获取当前第一可见行,下面一个是将当前活动行向下滚动若干行

Private Sub FindStrFromRTxt(FindStr As String, Rtxt As RichTextBox)
'在 Rtxt 中查找 FindStr ,并把 FindStr 所在的行显示在第一可见行
Dim I As Integer
I = Rtxt.GetLineFromChar(Rtxt.Find(FindStr))
'先查找目标字符串所在的行号;注意,这个方法使用之后,当前行会从 0 行移动到目标字符串所在行
'但是目标字符串所在行(当前活动行)是在最后一个可见行,而不是第一个(要是那样的话,下面就不用做了)

Dim RTxtFirstVisibleLine As Integer
RTxtFirstVisibleLine = SendMessage(Rtxt.hwnd, &HCE, 0, 0&)
'获取当前第一可见行位置

SendMessageBynum Rtxt.hwnd, &HB6, 0, I - RTxtFirstVisibleLine '向下滚动i行
'把当前行向下移动 I - RTxtFirstVisibleLine,其实 I - RTxtFirstVisibleLine 就是一页可见行的行数
'相当于把当前页向下翻一页少一行,从而让查找字符串从最后一个可见行移动到第一个可见行

End Sub
王二.麻子 2014-04-29
  • 打赏
  • 举报
回复
With RichTextBox1 .UpTo vbCrLf, True, False With RichTextBox1 .UpTo vbCrLf, False, False 这样的方法可以移动到一行(实际的行,不是显示的行,以回车定义)的行首或者行尾。 一定要用Upto方法,要先设置插入点在需要的位置,再移动。 按你的要求,要先找到需要查找的字符串。然后设置selstart为字符串位置。然后开始移动,移动到该行第一个字符并记录这个位置。然后移动到该行尾,并记录位置。然后提取两个位置之间的字符串。
SmartBeanDad 2014-04-28
  • 打赏
  • 举报
回复
有个网友说用 RichTextBox.Upto 方法可以实现我要的效果,但是我试了一下还是不行。请问 RichTextBox.Upto 能实现我要的效果吗?还是我没有正确使用该方法?
王二.麻子 2014-04-28
  • 打赏
  • 举报
回复
先找到指定的字符串的位置。假定位置为A,InStr(), 然后从A位置向前找vbcrlf,假定位置为B,InStrRev() 然后从A位置往后找vbcrlf,假定位置为C。 修改显示,第一行增加显示为位置B至位置C的内容。Mid()

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧