【发布时间】:2018-04-19 17:28:21
【问题描述】:
我想要做的是在文本框中搜索特定的字符串并用红色更改前景色,到目前为止它可以工作:
Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
Dim loc As Integer
'check if it contains the <html> tag and if it does select it and change the colour to red.
If RichTextBox1.Text.Contains("Card Locked") Then
loc = RichTextBox1.Find("Card Locked")
RichTextBox1.Select(loc, 12)
RichTextBox1.SelectionColor = System.Drawing.Color.Red
'TextBox1.ForeColor = System.Drawing.Color.Red
End If
If RichTextBox1.Text.Contains("Card Unlocked") Then
loc = TextBox1.Find("Card Unlocked")
RichTextBox1.Select(loc, 14)
RichTextBox1.SelectionColor = System.Drawing.Color.Red
End If
End sub
但是如果在richtextbox1中我有两行“卡锁定”在不同的地方,它只会改变第一个serach的颜色,它只会对第一个着色,而另一个将保持默认颜色。每次应用找到需要的字符串时,如何让它在整个文本中搜索并更改前景色?
【问题讨论】:
-
一方面,
TextBox类没有Find或SelectionColor成员。大概您正在使用RichTextBox。请准确描述您的问题,以免造成混淆并因此浪费我们和您的时间。 -
至于问题,
Find方法允许您指定文本中从何处开始搜索。这意味着您可以在循环中调用Find并在上一个匹配之后开始每次搜索,直到找不到匹配为止。 -
如果有任何合理数量的文本,我建议的循环选项可能会非常耗时。你应该比搜索每个
TextChanged事件更聪明一点。通过查看插入符号的位置及其周围的字符,不难确定刚刚发生的更改是否可能导致添加新匹配或删除现有匹配。如果您想匹配“XXX”并且插入符号位于两个“Y”字符之间,那么搜索的意义何在? -
是的,对不起,我正在使用richtextbox。顺便说一句,我理解你的建议,但我只是不知道如何让它搜索到文本的结尾,我不知道我可以 TextBox1.Find("Card Locked", IndexToStart),但是如何让它正确循环。文本不是很大,只有 1000 个字符
-
与所有编程问题一样,您需要先了解逻辑,然后才能编写代码。拿起笔和纸,写下手动实现目标所需执行的步骤。只有当你有一个有效的算法时,你才应该尝试编写代码,因为它是代码需要实现的算法。说你在尝试不超过 10 分钟后就不能做某事根本不准确。您需要更加努力地知道自己无法做到这一点。