2016-11-13 3 views
0

Я пытаюсь изменить цвет для конкретной строки в richTextBox с открытием текстового документа внутри него уже существующей строкой или добавить через richTextBox, чтобы сохранить сохраненный текст и черный, кроме определенных линия.Как изменить цвет для определенной строки в richTextBox

Я попал в событие richTextBox_TextChanged, но не подходит для меня. Он меняет текст для определенной строки и сохраняет текст черного цвета, но во всех случаях у меня одинаковые две проблемы: сначала:

Если я добавляю текст к определенной цветной красной строке из richTextBox, слитой с другим словом или символом, например:

если содержание текста документа:

some string 
some string 
red string 

и если добавить к нему что-то вроде:

some string 
some string 
xred string 

или:

some string 
some string 
red stringx 

результат становится второй, если добавить еще одну строку, равную "red string":

some string 
some string 
red stringx  // << This line remains red 
red string   // << and this does not changes and remains black 

И еще одна проблема, если я пишу текст после красной строки в richTextBox, все следующий текст на этапе написания тоже становится красный.

Например, строка, которая должна быть красный:

string Str = "red string"; 

таким образом:

Color aColor = Color.FromName(Str.Split(' ')[0]); 
    if (richTextBox1.Text.Contains(Str) && aColor != Color.Red) 
    { 
     richTextBox1.Select(richTextBox1.Text.IndexOf(Str), Str.Length); 
     richTextBox1.SelectionColor = Color.Red; 
    } 

или таким образом:

Color aColor = Color.FromName(Str.Split(' ')[0]); 
    if (richTextBox1.Text.Contains(Str) && aColor != Color.Red) 
    { 
     richTextBox1.Find(Str); 
     richTextBox1.SelectionColor = Color.Red; 
    } 

Или это способ, который может содержать перечисленные строки менять цвета для каждого цвета, если это необходимо, string[] words = { "specword1", "specword2" };, но в этом случае только что показанные как отличающиеся лор способ сделать это, с одной и только нужное значение сверху, и пустой string[] words:

string[] words = { "" }; 
    Color[] colors = { Color.Red }; 
    for (int i = 0; i < words.Length; i++) 
    { 
     string word = words[i]; 
     Color color = colors[i]; 
    { 
     richTextBox1.Find(Str); 
     richTextBox1.SelectionColor = color; 
    } 
    } 

У меня же две проблемы в результате со всеми попытками, и если я использую его с Form1_Load он просто не делает любой изменения цвета.

Так мне интересно, что может быть решение для этого случая, и только одна вещь приходит на ум, но не уверен, что это правильный способ решения этой проблемы:

Я не знаю, как, но каким-то образом сделать недоступным редактирование красной строки, которая всегда находится в отдельной строке в текстовом документе и в то же время не позволяет писать или вставлять ее вручную в richTextBox.

В любом случае, если это может помочь с первой проблемой, похоже, что это не помогает избежать изменения цвета для последующего текста после красной строки.

ответ

1

внутри richTextBox_TextChanged проверки полной строки текста при сравнении

string str = "red string"; 
for(int i=0; i<richTextBox1.Lines.Length; i++) 
{ 
    string text = richTextBox1.Lines[i]; 
    richTextBox1.Select(richTextBox1.GetFirstCharIndexFromLine(i), text.Length); 
    if(text ==str) 
    { 
    richTextBox1.SelectionColor = Color.Red; 
    }else 
    { 
    richTextBox1.SelectionColor = Color.Black; 
    }  
} 

для нескольких цветов, я хотел бы использовать словарь

var dictionary = new Dictionary<string, System.Drawing.Color>(); 
    dictionary.Add("red color", System.Drawing.Color.Red); 
    dictionary.Add("Blue color", System.Drawing.Color.Blue); 
//as above example you can use for loop and get each line of rich textbox 
string linefromTextBox = "Blue color"; 
//then check that line contain of of text in the dictionaly 
if (dictionary.ContainsKey(linefromTextBox)) 
{ 
    // if key found then you can get the color as below 
    // asign this as SelectionColor 
    //before that you need to Select the line from rich text box as above example 
    var color = dictionary[linefromTextBox]; 
} 
+0

Здравствуйте, мне нужно, чтобы получить результаты, описанные в первом примере, но все еще была та же проблема. Если я добавлю «красную строку» вручную, если я напишу что-нибудь после «красной строки», символы станут красными –

+0

Проверьте мой обновленный ответ – Damith

+0

Предыдущий ответ был на 99% ответил, в этом случае я не могу ничего писать, чтобы добавить после символа. Так что для моего случая ваше первое решение работает хорошо, за исключением красного цвета после красной строки, но не так, как с моими примерами, во время написания, тогда только нужные строки красные. –

Смежные вопросы