执行RichTextBox事件处理程序“textChanged”

时间:2014-02-14 18:03:31

标签: c# winforms colors richtextbox

我有一个winform应用程序,它有一组RichTextBoxes。 我想在文本框内容改变时将文本颜色更改为红色

我有一个按钮,单击此按钮时,文本颜色将重置为其默认颜色。

问题是,当我使用事件处理程序(TextChanged)来检测内容是否发生了更改时,它也会在重置颜色时被触发。

更清楚我会举一个例子:

1-文本框的内容发生变化 2-触发事件处理程序并将文本颜色更改为红色。 3-单击按钮,然后文本再次变黑 4-当文本颜色改变时,再次触发事件处理程序并将颜色更改为红色。

所以,即使单击按钮,颜色似乎也总是红色。

我该如何处理这个问题?我只需要检测内容的变化,而不是颜色

这是代码中的一部分:

private void AHReg_TextChanged(object sender, EventArgs e)
{
    AHReg.ForeColor = Color.Red;
}

private void RunButton_Click(object sender, EventArgs e)
{
    resetControlColor(); //this function sets the text color to Black
}

2 个答案:

答案 0 :(得分:2)

你可以在你的班级中添加一个名为NeedToBeChanged的布尔变量。

private bool NeedToBeChanged = true;

private void RunButton_Click(object sender, EventArgs e)
    {
        NeedToBeChanged =false;
        resetControlColor(); //this function sets the text color to Black
        NeedToBeChanged =true;
    }
private void AHReg_TextChanged(object sender, EventArgs e)
    {
            if(NeedToBeChanged)
            AHReg.ForeColor = Color.Red;
    }

答案 1 :(得分:2)

有几种方法可以抚养这只猫。您可以跟踪实际文本并查找不匹配项,或处理ForeColorChanged事件,但我认为最简单的方法是在重置时“关闭”事件订阅。

例如,在您的RunButton_Click方法中:

private void RunButton_Click(object sender, EventArgs e)
{
    AHReg.TextChanged -= AHReg_TextChanged;
    resetControlColor(); //this function sets the text color to Black
    AHReg.TextChanged += AHReg_TextChanged;
}

如果你需要在resetControlColor()函数中激活该事件,那么你需要以不同的角度来看这个事件,但这是最简单的接近它。

相关问题