Как изменить цвет выделения в richtextbox после пересечения лимита символов 60
Я создаю проект приложения windows, где мне нужно создать RichTextbox с меткой количества символов.
Мое требование заключается в том, что пользователь может ввести до 80 символов в RichTextbox, но только первые 60 символов могут быть сохранены в базе данных. Я хочу отобразить набранные символы > 60 красным цветом.
Используя приведенный ниже код, он отображает превышение символов красным цветом от 62-го символа, он должен отображаться от 61-го символа.
В некоторых тестовых случаях компонент работает неправильно.
Например:
После ввода 65 символов последние 5 символов должны отображаться красным цветом, после удаления первых двух символов значение счетчика уменьшается, но цвет последних 5 символов все еще отображается красным цветом, в идеале он должен отображать последние 3 символа красным цветом, который превысил предел 60.
Что я уже пробовал:
Пожалуйста, проверьте приведенный ниже код и помогите мне решить эту проблему.
// Variables int Typed_Characters_Count=0; int Remain_Characters_Count=0; int maxAllowedCharacters = 60; string charactersToSave="";
Я использовал логику как показано ниже в событии RichTextbox Textchanged:
private void txt_wordbox_TextChanged(object sender, EventArgs e) { Typed_Characters_Count = txt_wordbox.TextLength; if (Typed_Characters_Count == 0) { // Default lbl_Header.Text = "Add Work Item"; lbl_Counter.Text = maxAllowedCharacters + "/" + maxAllowedCharacters; lbl_Counter.ForeColor = Color.Black; Btn_Save.Enabled = false; } else if (Typed_Characters_Count >= 1 && Typed_Characters_Count <= 60) { if (string.IsNullOrWhiteSpace(txt_wordbox.Text) && txt_wordbox.Text.Length > 0) { Btn_Save.Enabled = false; lbl_Header.Text = "Add Work Item"; Remain_Characters_Count = maxAllowedCharacters - Typed_Characters_Count; lbl_Counter.Text = Remain_Characters_Count.ToString() + "/" + maxAllowedCharacters; lbl_Counter.ForeColor = Color.Black; } else { Btn_Save.Enabled = true; lbl_Header.Text = "To save, click save icon"; // Save the selection's start and length. int sel_start = txt_wordbox.SelectionStart; int sel_length = txt_wordbox.SelectionLength; CultureInfo culture_info = Thread.CurrentThread.CurrentCulture; TextInfo text_info = culture_info.TextInfo; txt_wordbox.Text = text_info.ToTitleCase(txt_wordbox.Text); // Restore the selection's start and length. txt_wordbox.Select(sel_start, sel_length); Remain_Characters_Count = maxAllowedCharacters - Typed_Characters_Count; lbl_Counter.Text = Remain_Characters_Count.ToString() + "/" + maxAllowedCharacters; lbl_Counter.ForeColor = Color.Black; } } else if (Typed_Characters_Count > 60) { lbl_Header.Text = "Reduce Characters to 60"; Remain_Characters_Count = maxAllowedCharacters - Typed_Characters_Count; lbl_Counter.Text = Remain_Characters_Count.ToString() + "/" + maxAllowedCharacters; lbl_Counter.ForeColor = Color.Red; lbl_Header.ForeColor = Color.Red; txt_wordbox.SelectionColor = Color.Red; }