突出显示richtextbox中包含“admin”的所有行

时间:2013-12-20 15:46:24

标签: vb.net timer richtextbox highlighting

我正在为我的游戏启动器进行聊天,当你启动它时,一个按钮打开一个聊天论坛,上面有一个富文本框,当文本在服务器上的txt文件中发生变化时,它会刷新/定时器检查从textbox1更改然后它将重新打印文本,但这不是问题,我有一个管理面板,但我想突出显示有“!ADMINISTRATOR!”的行。在它中它显示用户是一个管理员,它突出显示,以显示他在说什么。我试过这个

Dim index As Integer = Me.RichTextBox1.Find("!ADMINISTRATOR!")
    If index <> -1 Then
        Dim lineindex As Integer = Me.RichTextBox1.GetLineFromCharIndex(index)
        Dim first As Integer = Me.RichTextBox1.GetFirstCharIndexFromLine(lineindex)
        Dim last As Integer = Me.RichTextBox1.GetFirstCharIndexFromLine(lineindex + 1)
        If last = -1 Then last = Me.RichTextBox1.TextLength
        Me.RichTextBox1.Select(first, last - first)
        Me.RichTextBox1.SelectionBackColor = Color.Yellow
    End If

但是在某种程度上它起作用并不总是突出它,虽然它有时会突出显示,它也可能突出刚才放的文本,但我不介意,主要的问题是它只是突出显示包含文本的第一行,因此如果管理员在其上发布消息,它将突出显示&lt; 3但是然后用户将聊天,然后管理员发布另一条消息,它只突出显示包含该文本的第一行。如果你需要更多的信息哦和测试目的我在我的电脑上使用本地文件,香港专业教育学院测试它工作的ftp,但只是为了节省时间我使用txt文件这是我用于计时器的代码

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    If (System.IO.File.ReadAllText(Get_Directory_Current() & "\FilesDB\Chat\Chat.txt") = RichTextBox1.Text) Then

    Else
        Try
            RichTextBox1.Text = System.IO.File.ReadAllText(Get_Directory_Current() & "\FilesDB\Chat\Chat.txt")
            RichTextBox1.SelectionStart = RichTextBox1.Text.Length
            RichTextBox1.ScrollToCaret()
            ColorChat() ' this is the color chat that kinda dont work
        Catch ex As Exception
        End Try
    End If
End Sub

如果你可以帮助谢谢:)但是现在我只是尝试新事物。我想如果你突出显示一行而不是单词,它会有点像语法高亮。

哦,如果你想知道这是我如何将文字添加到聊天/格式化

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    RichTextBox1.AppendText("<[" & Get_Time() & " " & strDate & "] " & "!ADMINISTRATOR!" & " | " & Environment.UserName & "> " & TextBox3.Text & vbNewLine)
End Sub

1 个答案:

答案 0 :(得分:1)

使用String.Replace()在目标字符串出现的位置注入Rtf格式。

Dim stringToFind = "!ADMINISTRATOR!"
Dim txt = Me.RichTextBox1.Text
Dim sb = New System.Text.StringBuilder()
sb.Append("{\rtf1\ansi\deff0 {\colortbl;\red0\green0\blue0;\red255\green0\blue0;}")
sb.Append(txt.Replace(stringToFind, String.Format("\cf2{0}\cf1", stringToFind)))
sb.Append("}")
Me.RichTextBox1.Rtf = sb.ToString()