绑定前,不要添加该事件(设计阶段去除该控件的该事件),在绑定之后,添加该事件的委托到控件中。
如控件的事件假设为:
private void 控件_ValueChanged(.....)
{
  //控件事件
}在绑定之后执行如下代码:
控件.ValueChanged += new 该事件的委托(控件_ValueChanged); 如果不知道事件的委托是什么,可以先在设计阶段添加该事件,然后打开当前类的 .Designer.cs 文件,从中找到这个控件的关于添加事件委托的代码,然后把该代码复制到绑定之后中,最后删除该事件即可。

解决方案 »

  1.   

    此方法不适用:
    1、数据绑定通过编程方法实现,目的是为了多次更改绑定,难不成也多次添加该事件的委托?
    2、就按该方法,我做过测试,还是会触发该事件,以下是测试的代码片断(先绑定,后添加委托),在Designer.cs 无ValueChanged的重复委托。numericUpDown1.DataBindings.Add("Value", _rGZSC, "XSZS");
    numericUpDown1.ValueChanged += new System.EventHandler(ValueChanged);void ValueChanged(object sender, EventArgs e)
    {
        DataChanged(this, new EventArgs());
    }
      

  2.   

    我认为应该在ValueChanged里面写上
    if(!控件.Focused) return;
    当然我的写法是比较投机取巧,楼主可根据自己的实际情况而定
      

  3.   

    设一个全局布尔变量,初始值设为false,在ValueChanged事件代码中加上判断。private bool IfBounded=false;void ValueChanged(object sender, EventArgs e) 

        if (!IfBounded) return;
        DataChanged(this, new EventArgs()); 
    }在重新绑定之前,设为false,绑定完之后设为true,不知道这种方法可不可行。private void bounddata()
    {
       IfBounded=false;
       绑定数据源....
       IfBounded=true;
    }
      

  4.   

    -= ValueChanged
    数据绑定
    += ValueChanged不就行了
      

  5.   

    回复5楼:
    bounddata 与ValueChanged 是在同一线程中,只有当bounddata执行完后才会触发ValueChanged事件,所以IfBounded的值永远是true,该方法除非用多线程实现。但多线程编程的工作量太大,而且控制比较困难。
    我记得以前好像用过一个方法,可以在控件或数据加载时,暂停控件的事件触发,只是想不起用什么方法了,或是VB中有该功能,或者说这个记忆就是错的。
    回复3楼:
    你的方法,粗一想,行不通;但细想也对,当手动更改控件值时,该控件是有焦点的。不过,如果2个控件是有连带关系,当手动修改其中一控件,而带动另一控件的值时,那将无法获得正确的结果。
      

  6.   

    触发一个事件时应该是打开一个新的线程的,我做了一个简单的例子:
    private void button1_click(object sender, EventArgs e)
    {
      textbox1.text="aaa";
      Console.WriteLine("button1_click");
    }private void textbox1_textchanged(object sender, EventArgs e)
    {
      Console.WriteLine("textbox1_textchanged");
    }我在点击button1时,输出的结果是:
    textbox1_textchanged
    button1_click也就是说在给textbox1赋值时先触发了textchanged事件,然后继续下面的代码,不知我这样的解释合理不?
      

  7.   

                textBox1.TextChanged -= textBox1_TextChanged;
                这里实现数据的绑定。
                textBox1.TextChanged += textBox1_TextChanged;
    我测试过了,不会触发事件
      

  8.   

    感谢各位对该帖的关注,特别感谢tao77对问题的认真负责。虽然“暂时挂起控件的事件”的这个目标没实现,但通过大家的热心帮助使我解决了这个问题。