Member 12896541 Ответов: 1

Изменить текстовое поле перед цветом одной строки текста


Есть ли способ сделать так, чтобы одна строка текста была красной, а другая-зеленой?

if (Process.GetProcessesByName("RobloxPlayerBeta").Length > 0)
   {
       System.Threading.Thread.Sleep(4000);
       textBox2.Text += "\r\nWelcome to AL7!";
       textBox2.Update();
       textBox2.Text += "\r\nLoading Lua environment.";
       textBox2.Update();
       textBox2.Text += "\r\nERROR: Lua state failed.";
       textBox2.Update();


Что я уже пробовал:

if (Process.GetProcessesByName("RobloxPlayerBeta").Length > 0)
   {
       System.Threading.Thread.Sleep(4000);
       textBox2.Text += "\r\nWelcome to AL7!";
       textBox2.Update();
       textBox2.Text += "\r\nLoading Lua environment.";
       textBox2.Update();
       textBox2.Text += "\r\nERROR: Lua state failed.";
       textBox2.Update();

Philippe Mori

Этот код не имеет никакого смысла :

1) Вы никогда хотите позвонить Sleep сформируйте поток пользовательского интерфейса.
2) вам почти никогда не нужно явно звонить Update() явно.
3) Зачем вам обновлять текст 3 раза, когда это можно сделать один раз.
4) жестко закодированные строки, как правило, не очень хорошая идея.
5) и Ваше текстовое поле плохо названо.

И еще, очень глупо писать дважды один и тот же вопрос. То Что я пробовал раздел не должен повторять то же самое, что было написано в вопросе. Люди, которые тратят другое время, заставляя потом читать один и тот же текст дважды, не заслуживают большой помощи.

Philippe Mori

Вы не можете иметь несколько цветов в стандартном текстовом поле WinForms. Из вашего вопроса неясно, используется ли текстовое поле только для отображения информации (только для чтения) или пользователь также может вводить ее. Если пользователю не нужно вводить информацию, вы можете использовать встроенный веб-браузер, например.

1 Ответов

Рейтинг:
0

Mehedi Shams

Привет Член 12896541,

Буквально то, что вы хотите, не достижимо с помощью текстового поля. Если вам действительно нужен этот цветовой механизм, вам нужно использовать форматированное текстовое поле. Ответ уже дан здесь: языке C# richtextbox с другой цвет для каждой линии - переполнение стека[^]

Элемент управления RichTextBox имеет Lines перечислитель, которым можно манипулировать, чтобы получить ссылку на каждую строку в поле. Затем вам нужно выбрать всю строку с помощью GetFirstCharIndexFromLine и свойство длины линии. Наконец, вам нужен механизм для установки цвета для каждой нечетной и четной линии; вы можете использовать оператор модуля.

int LineCount = 0;
foreach (string line in richTextBox1.Lines)
{
    richTextBox1.Select(richTextBox1.GetFirstCharIndexFromLine(LineCount), line.Length);
    richTextBox1.SelectionColor = (LineCount++ % 2 == 0) ? Color.Red : Color.Green;
}
Пожалуйста, проверьте здесь в качестве ссылки:

Управления richtextbox.Собственность SelectionColor (Системы.Окна.Формы)[^]

Также проверьте 5 пунктов, упомянутых Филиппом. Это хорошие предложения, поэтому, пожалуйста, измените код соответствующим образом.