在一个窗体中有多个TextBox控件,当修改其中一个,会通过程序检查与之相关的TextBox(即值是由上一个通过公式计算而来的),然后会自动修改那些与之相关的值回填到相应的TextBox中。
我是通过TextChanged事件进行触发的,但这样有个问题,当我修改第一个TextBox时,与之相关的TextBox值就通过计算得出一个值,但当回填到它对应的TextBox时,会再次触发TextChanged事件如何能使只是修改的TextBox控件触发,当触发完毕其它与之相关的TextBox回填值时不触发呢?
请指教!谢谢!

解决方案 »

  1.   

    建议你在change事件里在判断是否按下键盘.在你没有按键盘的时候不就不会触发了回填值了么?
      

  2.   

    bool changing = false;textBox1_TextChanged(...)
    {
       if (changing) return;
       changing = true;
       .....
       changing = false;
    }
      

  3.   

    在TextChanged事件中对任何一个TextBox的Text赋值的时候要像如下的代码一样把事件先注销然后再注册上:
    private void textBox_TextChanged(object sender, EventArgs e)
    {
    TextBox tmp = sender as TextBox;
    if (tmp == this.textBox1)
    {
    this.textBox2.TextChanged -= new EventHandler(textBox_TextChanged);
    this.textBox2.Text = "...";
    this.textBox2.TextChanged += new EventHandler(textBox_TextChanged);
    }
    else
    {
    this.textBox1.TextChanged -= new EventHandler(textBox_TextChanged);
    this.textBox1.Text = "...";
    this.textBox1.TextChanged += new EventHandler(textBox_TextChanged);
    }
    }