我有一个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
}
答案 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()函数中激活该事件,那么你需要以不同的角度来看这个事件,但这是最简单的接近它。