2014-02-14 87 views
1

我有一个RichTextBoxes的WinForm应用程序。 我想在文本框内容更改时将文本颜色更改为红色执行RichTextBox事件处理程序“textChanged”

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

问题是,当我使用事件处理程序(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

有几种方法来剥皮这只猫。您可以跟踪实际文本并查找不匹配项,或处理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(活动)功能,那么你就需要来在这个不同的角度,但是这就是最简单的方式来接近它。

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; 
    } 
+0

如果所有文本框同时更改,换句话说,当所有框更改或所有框未更改时,此解决方案都很有用。但情况是他们中的一些(可能)会被更改,而另一些则不会,所以根据您的解决方案,我会为每个文本框创建一个变量。 – Rehab11

+1

据我所知你可以添加行if(NeedToBeChanged)给每个TextChanged事件,而不是添加许多变量 –

+0

哦,是的,你是对的 – Rehab11

相关问题