我正在为我的游戏启动器进行聊天,当你启动它时,一个按钮打开一个聊天论坛,上面有一个富文本框,当文本在服务器上的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
答案 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()