我写了一个组合查询的用户控件,查询按钮的方法是用委托实现的,如下:
我定义了一个委托: public delegate void sbtnSearch_Click(object sender, EventArgs e);
在用户控件中定义了一个委托类型的事件: public event sbtnSearch_Click sbtnsearcClick;
还定义了一个方法来给查询按钮注册事件: public void searchclick()
{
this.sbtnSearch.Click += new EventHandler(sbtnsearcClick);
}
在一个窗体中我使用了这个用户控件并实现了查询方法:
public void sbtnSearch_click(Object sender, EventArgs e){……}
并且在该窗体加载时给用户控件的查询事件注册了这个方法:
this.ucSearch1.sbtnsearcClick += sbtnSearch_click;
并调用给查询按钮注册事件的方法: this.ucSearch1.searchclick();
这样在窗体运行后点击用户控件上的查询按钮出现的情况是:
窗体页面实现查询的方法 sbtnSearch_click被多次调用,请教各位这是什么原因??
个人看法
public event sbtnSearch_Click sbtnsearcClick;
这句话已经将委托和事件关联起来了,也就是在执行
this.ucSearch1.sbtnsearcClick += sbtnSearch_click;
的时候,已经把sbtnsearcClick事件和查询方法关联了。之后调用
this.ucSearch1.searchclick();
相当于又一次的+= sbtnSearch_click 所以会多次调用
关于委托与事件你可以多参考些文章;
关于你给出的这个问题 出现这几个错误:
this.ucSearch1.sbtnsearcClick += sbtnSearch_click;窗体加载时给事件注册一个委托
然后每点一次查询又给事件注册一个委托
public void searchclick()
{
this.sbtnSearch.Click += new EventHandler(sbtnsearcClick);
}
照你这样的逻辑下去,你点了10次则要调用11次sbtnSearch_click;
通过GetInvocationList()方法可以查看委托所注册的方法。
言词不当请谅解