Làm cách nào để tô màu đỏ mỗi lần tôi gặp chữ "A" trong RichTextBox?Chọn lọc tô màu văn bản trong RichTextBox
Trả lời
Hãy thử điều này:
static void HighlightPhrase(RichTextBox box, string phrase, Color color) {
int pos = box.SelectionStart;
string s = box.Text;
for (int ix = 0; ;) {
int jx = s.IndexOf(phrase, ix, StringComparison.CurrentCultureIgnoreCase);
if (jx < 0) break;
box.SelectionStart = jx;
box.SelectionLength = phrase.Length;
box.SelectionColor = color;
ix = jx + 1;
}
box.SelectionStart = pos;
box.SelectionLength = 0;
}
...
private void button1_Click(object sender, EventArgs e) {
richTextBox1.Text = "Aardvarks are strange animals";
HighlightPhrase(richTextBox1, "a", Color.Red);
}
này sẽ không làm việc trong khi bạn đang gõ nếu đó là những gì bạn đang tìm kiếm, nhưng tôi sử dụng này để làm nổi bật chuỗi con:
Function Highlight(ByVal Search_Str As Object, ByVal InputTxt As String, ByVal StartTag As String, ByVal EndTag As String) As String
Highlight = Regex.Replace(InputTxt, "(" & Regex.Escape(Search_Str) & ")", StartTag & "$1" & EndTag, RegexOptions.IgnoreCase)
End Function
và gọi nó theo cách này:
Highlight("A", "Color All my A's red", [span class=highlight]', '[/span]')
Nơi lớp 'đánh dấu' có bất kỳ mã màu/định dạng nào bạn muốn:
.highlight {text-decoration: none;color:black;background:red;}
BTW: bạn cần thay đổi thứ OSE dấu ngoặc vuông để những góc cạnh ... họ sẽ không đi qua khi tôi gõ họ ...
cảm ơn vì sự giúp đỡ, nhưng bạn có mã C# không? – Gold
Đây là C# mã cho câu trả lời EJ Brennan của:
public string Highlight(object Search_Str, string InputTxt, string StartTag, string EndTag)
{
return Regex.Replace(InputTxt, "(" + Regex.Escape(Search_Str) + ")", StartTag + "$1" + EndTag, RegexOptions.IgnoreCase);
}
Dưới đây là một đoạn ra khỏi lớp wrapper của tôi để làm công việc này:
private delegate void AddMessageCallback(string message, Color color);
public void AddMessage(string message)
{
Color color = Color.Empty;
string searchedString = message.ToLowerInvariant();
if (searchedString.Contains("failed")
|| searchedString.Contains("error")
|| searchedString.Contains("warning"))
{
color = Color.Red;
}
else if (searchedString.Contains("success"))
{
color = Color.Green;
}
AddMessage(message, color);
}
public void AddMessage(string message, Color color)
{
if (_richTextBox.InvokeRequired)
{
AddMessageCallback cb = new AddMessageCallback(AddMessageInternal);
_richTextBox.BeginInvoke(cb, message, color);
}
else
{
AddMessageInternal(message, color);
}
}
private void AddMessageInternal(string message, Color color)
{
string formattedMessage = String.Format("{0:G} {1}{2}", DateTime.Now, message, Environment.NewLine);
if (color != Color.Empty)
{
_richTextBox.SelectionColor = color;
}
_richTextBox.SelectedText = formattedMessage;
_richTextBox.SelectionStart = _richTextBox.Text.Length;
_richTextBox.ScrollToCaret();
}
Bây giờ bạn có thể gọi bằng AddMessage("The command failed")
để tự động đánh dấu bằng màu đỏ. Hoặc bạn có thể gọi nó bằng AddMessage("Just a special message", Color.Purple)
để xác định màu đặc biệt (Ví dụ: hữu ích trong các khối bắt để xác định màu cụ thể, bất kể nội dung thư)
Cảm ơn Oliver, mã của bạn đã giúp tôi! – Maro
Có thể trùng lặp [Màu khác nhau của một chuỗi RichTextBox] (https: // stackoverflow.com/questions/1926264/color-different-parts-of-a-richtextbox-string) –