Foxtable(狐表)用户栏目专家坐堂 → [求助]RichTextBox 控件查找及定位


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

主题:[求助]RichTextBox 控件查找及定位

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


加好友 发短信
等级:五尾狐 帖子:1137 积分:11218 威望:0 精华:0 注册:2017/9/26 16:30:00
[求助]RichTextBox 控件查找及定位  发帖心情 Post By:2020/11/7 16:02:00 [只看该作者]

老师好!

在richtextbox中查找关键字,找到后高亮显示,且焦点转到被找到的内容。

在网上找到一段c#的代码,也转成.net的代码了,但是不能使用。麻烦老师看看代码。

谢谢!

 

c#代码:

Font f=new Font("Verdana", 8F, FontStyle.Italic, GraphicsUnit.Point);
string str="";
if (richTextBox1.Find(str)>0)
{
int pos=richTextBox1.Find(str);
richTextBox1.SelectionStart=pos;
richTextBox1.SelectionLength=str.Length;  
richTextBox1.SelectionFont=f;
richTextBox1.SelectionColor=Color.Red;
}  

 

.net代码:

Private Sub SurroundingSub()
    Dim f As Font = New Font("Verdana", 8F, FontStyle.Italic, GraphicsUnit.Point)
    Dim str As String = ""

    If richTextBox1.Find(str) > 0 Then
        Dim pos As Integer = richTextBox1.Find(str)
        richTextBox1.SelectionStart = pos
        richTextBox1.SelectionLength = str.Length
        richTextBox1.SelectionFont = f
        richTextBox1.SelectionColor = Color.Red
    End If
End Sub

 

窗口创建RichTextBox控件:

Dim ct As New System.Windows.Forms.RichTextBox
ct.Dock = System.Windows.Forms.DockStyle.Fill
ct.Name ="RichTextBox1"
e.Form.Controls("Panel1").BaseControl.Controls.Add(ct)
ct.text = "ASDFGH"

 


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105489 积分:536436 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/11/7 16:22:00 [只看该作者]

Dim richTextBox1 As System.Windows.Forms.RichTextBox = e.Form.Controls("Panel1").BaseControl.Controls(0)
Dim f As Font = New Font("Verdana", 8F, FontStyle.Italic, GraphicsUnit.Point)
Dim str As String = "要查找的字符"
Dim pos As Integer = richTextBox1.Find(str)
If pos > 0 Then
    richTextBox1.SelectionStart = pos
        richTextBox1.SelectionLength = str.Length
        richTextBox1.SelectionFont = f
        richTextBox1.SelectionColor = Color.Red
    End If


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


加好友 发短信
等级:五尾狐 帖子:1137 积分:11218 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2021/1/16 19:12:00 [只看该作者]

蓝老师,利用Find只能显示找到文档中出现的第一处字符串,如果文档中前后有多处,就不再往下找了。

如果要标注出所有的字符串,要用什么方法?

谢谢!

 

https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.forms.richtextbox.find?view=net-5.0


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105489 积分:536436 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/17 19:58:00 [只看该作者]

Find(Char[], Int32)

从特定的起始点开始,在 RichTextBox 控件的文本中搜索字符列表中某个字符的第一个实例

循环或者递归处理,从之前查询结果的位置+字长度作为新的起始点开始查询



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


加好友 发短信
等级:五尾狐 帖子:1137 积分:11218 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2021/1/17 20:58:00 [只看该作者]

循环和递归都不会弄,老师给写一段吧

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105489 积分:536436 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/17 21:17:00 [只看该作者]

Dim richTextBox1 As System.Windows.Forms.RichTextBox = e.Form.Controls("Panel1").BaseControl.Controls(0)
Dim f As Font = New Font("Verdana", 8F, FontStyle.Italic, GraphicsUnit.Point)
Dim pos As Integer =0
Dim str As String = "要查找的字符"
pos = richTextBox1.Find(str,pos,0)
do while pos > 0 
    richTextBox1.SelectionStart = pos
        richTextBox1.SelectionLength = str.Length
        richTextBox1.SelectionFont = f
        richTextBox1.SelectionColor = Color.Red
pos = pos + str.Length
pos = richTextBox1.Find(str,pos,0)
loop


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


加好友 发短信
等级:五尾狐 帖子:1137 积分:11218 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2021/1/17 21:35:00 [只看该作者]

谢谢蓝老师!图片点击可在新窗口打开查看

 回到顶部