定义了一个事件
textBox1_TextChanged程序中有代码段:
this.textBox1.TextChanged -= new System.EventHandler(this.textBox1_TextChanged);textBox1.Text = "ABC";this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);我跟踪了一下,为什么在执行到textBox1.Text = "ABC";以后还会执行textBox1_TextChanged事件?

解决方案 »

  1.   

    textBox1.Text = "ABC";以后还会执行textBox1_TextChanged事件?
    到这里又增加了一个委托事件啊。当然就会执行了。
      

  2.   

    楼上,我跟踪时还没执行到
    this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
      

  3.   

    this.textBox1.TextChanged -= new System.EventHandler(this.textBox1_TextChanged);
    执行到这就结束了 你已经把此事件给销毁掉了
      

  4.   

    既然毁掉了,我跟踪到textBox1.Text = "ABC";
    为什么还执行textBox1_TextChanged事件?
      

  5.   

    private void dataGridView1_MouseUp(object sender, MouseEventArgs e)
    {
    this.textBox1.TextChanged -= new System.EventHandler(this.textBox1_TextChanged);
    this.textBox2.TextChanged -= new System.EventHandler(this.textBox2_TextChanged);
    textBox1.Text=dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString();
    this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
    this.textBox2.TextChanged += new System.EventHandler(this.textBox2_TextChanged);
    }
    运行到
    textBox1.Text=dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString();
    这句时还执行textBox1.TextChanged 事件,晕!
      

  6.   

    楼主可以在
    textBox1.Text=dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString();
    this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
    以及相应事件textBox1_TextChanged处加个断点
    执行到Text改变时不会立即执行相应方法,而是直接执行添加事件,所以最终还是会响应的
      

  7.   

    奇怪,这个问题有意思了。
    我看了一下Form_Load事件
    private void Form_Load(object sender, EventArgs e)
    {
    this.textBox1.TextChanged -= new System.EventHandler(this.textBox1_TextChanged);
    this.textBox2.TextChanged -= new System.EventHandler(this.textBox2_TextChanged);
    Refresh_dataGridView1();
    this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
    this.textBox2.TextChanged += new System.EventHandler(this.textBox2_TextChanged);
    }
    而Refresh_dataGridView1()里面是:
    {
    this.textBox1.TextChanged -= new System.EventHandler(this.textBox1_TextChanged);
    this.textBox2.TextChanged -= new System.EventHandler(this.textBox2_TextChanged);
    ......
    this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
    this.textBox2.TextChanged += new System.EventHandler(this.textBox2_TextChanged);
    }是不是这个道理?请高手解答:
    在执行完Form_Load事件后,textBox1.TextChanged和textBox2.TextChanged都加了2次了,所以当我执行dataGridView1_MouseUp事件只减掉1次还是会执行textBox1.TextChanged事件?
      

  8.   

    我觉得是不是这样理解:-=和+=是不能嵌套的,例如:
    this.textBox1.TextChanged -= new System.EventHandler(this.textBox1_TextChanged);
    this.textBox1.TextChanged -= new System.EventHandler(this.textBox1_TextChanged);
    this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
    this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
    后会变成加了2个textBox1.TextChanged?而
    this.textBox1.TextChanged -= new System.EventHandler(this.textBox1_TextChanged);
    this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
    this.textBox1.TextChanged -= new System.EventHandler(this.textBox1_TextChanged);
    this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
    就没问题?