Изменение цвета строки - PullRequest
0 голосов
/ 29 марта 2012

Хорошо, так что это продолжение моего последнего вопроса, но у меня есть код:

private void btnTrans_Click(object sender, EventArgs e)     
    {
        var abrvStr = inputBx.Text;

        foreach (var kvp in d)

        {
            abrvStr = abrvStr.Replace(kvp.Key, kvp.Value);

        }

        outputBx.Text = abrvStr;


    }

В основном это часть словарной программы, так что когда вы вводите строку текста в текстовое поле1 он появляется в текстовом поле 2 со словом, замененным из текстового поля 1 в словаре.Так что, если черный, белый в словаре, и я вхожу Стена черная.Стена белого цвета появится в текстовом поле 2. Так что все хорошо.

Прямо сейчас сложная часть, как бы я изменил это, чтобы позволить мне иметь измененное слово в текстовом поле 2 в качестве красного цвета.Так что в моем примере выше, стена белая .Белый будет красным в строке вывода текста.

Обратите внимание, я использую RichTextBoxes

Язык C #!

Ответы [ 3 ]

2 голосов
/ 29 марта 2012

Вы можете использовать SelectionColor свойство RichTextBox.Начните с выбора слова, которое вы хотите отформатировать

string word = "white";
int start = richTextBox1.Find(word);
if (start >= 0) {
    richTextBox1.Select(start, word.Length);
    richTextBox1.SelectionColor = Color.Red;
}
2 голосов
/ 29 марта 2012

Для построения Ответ Оливера Жако-Декомба :

private void btnTrans_Click(object sender, EventArgs e)     
{
    var abrvStr = inputBx.Text;

    foreach (var kvp in d)

    {            
        abrvStr = abrvStr.Replace(kvp.Key, kvp.Value);
        int start = abrvStr.IndexOf(kvp.Value);
        if(start >= 0) 
        {
            richTextBox1.Text = abrvStr;
            richTextBox1.Select(start, kvp.Value.Length);
            richTextBox1.SelectionColor = Color.Red;
        }
    }
}

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

0 голосов
/ 29 марта 2012

Добавьте ссылку на KVP в словаре в свойство Tag Textbox.Когда пользователь меняет цвет, получите KVP из свойства Tag и измените значение в KVP.Я предоставляю информацию о свойстве Tag в моем блоге C # Winforms и скрытом теге Association .WPF / Silverlight также использует свойство Tag для элементов управления ..

--- Редактировать по запросу пользователя ---

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

... Местоположение инициализации ....

var myDictionary = new Dictionary<string, Tuple<string, System.Drawing.Color>>()
{
        { "Black", new Tuple<string,System.Drawing.Color>("White", Color.Green) },
        { "White", new Tuple<string,System.Drawing.Color>("Black", Color.Red) }

};

... (позже в коде) ...

private void btnTrans_Click (отправитель объекта, EventArgs e)
{

var key = inputBx.Text; // Let us say "White"

if (myDictionary.ContainsKey(key))
{

    var targetColor = myDictionary[key]; // Just get the value

    outputBx.Select(0, targetColor.Item1.Length);
    outputBx.SelectionColor = targetColor.Item2;
    outputBx.Text = targetColor.Item1;
}
else
{
    outputBx.Text = "Unknown";
}

}

Дополнительную информацию см. В моей блог-статье о словарях C # Tricks Dictionary Tricks

...