2014-02-14 85 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

相關問題