改变字符串颜色

时间:2012-03-29 13:58:13

标签: c# string dictionary colors richtextbox

好的,所以这是我上一期的问题,但我有代码:

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 个答案:

答案 0 :(得分:2)

您可以使用SelectionColor的{​​{1}}属性。首先选择要格式化的单词

RichTextBox

答案 1 :(得分:2)

构建于Oliver Jacot-Descombes answer

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语句来获取要更改选择的颜色。您需要修改它以适合字典中的值以及您想要的颜色。

答案 2 :(得分:0)

将字典中对KVP的引用添加到Textbox的Tag属性中。当用户更改颜色时,从Tag属性获取KVP并更改KVP中的值。我在博客C # Winforms and the Hidden Association Tag上提供了对Tag属性的深入了解。 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(object sender,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# Dictionary Tricks