任意控件(如TextBox),有它的TextChanged事件處理代碼,但我想只要是手工改變其Text才觸發,而代碼中設置其Text值時不觸發,如何做?有沒辦法控件某一事件處理過程不觸發?
請高手指點,100分相送!Tks

解决方案 »

  1.   

    // 可以利用textbox.tag属性。
    // 比如代码赋值的时候,先改.tag的值为1,赋万值之后,再改成0
    textbox1.tag = "1";
    textbox1.text = "adsfasdfa";
    textbox1.tag = "0";//TextChanged 里面判断其.tag的值,为1则不作。
    if (textbox1.tag = "1")
    {
       return;
    }
      

  2.   

    private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (this.textBox1.Focused)//手工改变
                {
                    //...
                }
            }
      

  3.   

    謝謝上面高手指點,方法的確很好,只是問題我沒描述清楚,有一頁面包括DatetimePicker,TextBox,Listbox,Datagridview...我將這些控件相應的TextChange或ValueChange或DataSourceChanged委托給Data_Changed(Object Sender,Eventagres e)過程。
    樓上兩位給的方法我無法處理這種特殊情況。盼高手指點!
      

  4.   

    委托的也没问题,可以通过判断Sender
      

  5.   

    private void textBox1_TextChanged(object sender, EventArgs e)
            {
                Control c = sender as Control;
                if (c.Focused)
                {
                    //...
                }
            }
      

  6.   

    第一个就足够了吧
    如果textBox1_TextChanged函数只作为一个控件的委托函数,还需要判断sender吗?
      

  7.   

    你可以在不需要的时候注销委托:
    this.textBox1.TextChanged -= new EventHandler(textBox1_TextChanged);
    再在需要的时候添加委托:
    this.textBox1.TextChanged += new EventHandler(textBox1_TextChanged);