【问题标题】:Execution of RichTextBox event handler "textChanged"RichTextBox 事件处理程序“textChanged”的执行
【发布时间】:2014-03-14 05:32:09
【问题描述】:

我有一个带有一组 RichTextBox 的 winform 应用程序。 我想在文本框内容更改时将文本颜色更改为红色

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

问题是,当我使用事件处理程序(TextChanged)来检测是否发生 Contents 的变化时,它也会在颜色重置时触发。

为了更清楚,我举个例子:

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
}

【问题讨论】:

    标签: c# winforms colors richtextbox


    【解决方案1】:

    有几种方法可以给这只猫剥皮。您可以跟踪实际文本并查找不匹配项,或处理 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;
          }
      

      【讨论】:

      • 如果所有文本框同时更改,即所有框都更改或所有框未更改,则此解决方案很好。但情况是其中一些(可能)会改变,而另一些则不会,所以,根据你的解决方案,我将为每个文本框创建一个变量。
      • 据我了解,您可以将 if(NeedToBeChanged) 行添加到每个 TextChanged 事件中,而不是添加很多变量
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 2011-12-12
      相关资源
      最近更新 更多