我想爲richtextbox中的所有字符串着色。例如,如果一個特定的字符串的前綴是如何根據字符串的前綴爲RichTextBox的文本着色?
Received:
那麼它應該是藍色Send:
那麼它應該是紅色Info:
那麼它應該是綠色
*The way I output the text in the RichTextBox is by ascending order, it means that all the newest messages will be outputted at the top of the RichTextBox, the old ones will go down.
屏幕截圖:
個代碼:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim msg_info As String = Nothing
If RB_Info.Checked = True Then
msg_info = "Info: "
End If
If RB_Send.Checked = True Then
msg_info = "Send: "
End If
If RB_Received.Checked = True Then
msg_info = "Received: "
End If
RichTextBox1.Text = RichTextBox1.Text.Insert(0, msg_info & TextBox1.Text & ControlChars.NewLine)
End Sub
End Class
編輯:我試圖將這種子,但它改變了所有項目的ListBox中的顏色
Sub HighlightPhrase(box As RichTextBox, phrase As String, color As Color)
Dim pos As Integer = box.SelectionStart
Dim s As String = box.Text
Dim ix As Integer = 0
While True
Dim jx As Integer = s.IndexOf(phrase, ix, StringComparison.CurrentCultureIgnoreCase)
If jx < 0 Then
Exit While
End If
box.SelectionStart = jx
box.SelectionLength = phrase.Length
box.SelectionColor = color
ix = jx + 1
End While
box.SelectionStart = pos
box.SelectionLength = 0
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim msg_info As String = Nothing
If RB_Info.Checked = True Then
msg_info = "Info: "
HighlightPhrase(RichTextBox1, "Info", Color.Blue)
End If
If RB_Send.Checked = True Then
msg_info = "Send: "
HighlightPhrase(RichTextBox1, "Send", Color.Green)
End If
If RB_Received.Checked = True Then
msg_info = "Received: "
HighlightPhrase(RichTextBox1, "Received", Color.Red)
End If
RichTextBox1.Text = RichTextBox1.Text.Insert(0, msg_info & TextBox1.Text & ControlChars.NewLine)
End Sub
是的,這是偉大的。它唯一遺漏的就是RichTextBox應該在RichTextBox的上部輸出新文本。像這樣'RichTextBox1.Text = RichTextBox1.Text.Insert(0,msg_info&TextBox1.Text&ControlChars.NewLine)' –
非常感謝!這真的有用! –