以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]RichTextBox 控件查找及定位  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=158095)

--  作者:天一生水
--  发布时间:2020/11/7 16:02:00
--  [求助]RichTextBox 控件查找及定位

老师好!

在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"

 


--  作者:有点蓝
--  发布时间: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


--  作者:天一生水
--  发布时间:2021/1/16 19:12:00
--  

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

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

谢谢!

 

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


--  作者:有点蓝
--  发布时间:2021/1/17 19:58:00
--  
Find(Char[], Int32)

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

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



--  作者:天一生水
--  发布时间:2021/1/17 20:58:00
--  
循环和递归都不会弄,老师给写一段吧
--  作者:有点蓝
--  发布时间: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


--  作者:天一生水
--  发布时间:2021/1/17 21:35:00
--  
谢谢蓝老师!图片点击可在新窗口打开查看