参与过hillwell (天子门生)的 “如何解决运行多个程序实例问题?”朋友请留步,有个bug请注意。

TheAres 2002-10-30 01:10:08
原帖子在http://expert.csdn.net/Expert/topic/1106/1106251.xml?temp=.9373896

帖子中有一问“问一下,怎样用代码触发按钮的click事件?”
回答是
1. button1_Click(null, null);
2. Button_Click(sender,null);
3. Button1_Click(object sender,null);
4。Button1_Click(sender,null);
我但是说第一种比较好,实际上是不对的。是这样:

this.button1.PerformClick();
这样button1所有的Click事件都会得到响应.例如:
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemWindowsFormsButtonClassPerformClickTopic.htm

private void InitializeComponent()
{
...
this.button1.Click += new System.EventHandler (this.button1_Click);
this.button1.Click += new System.EventHandler(this.button1_Click2);
...
}

private void button1_Click(object sender, System.EventArgs e)
{
this.textBox1.Text = "Click!";
}
private void button1_Click2(object sender, System.EventArgs e)
{
this.textBox2.Text = "Click!";
}
private void button2_Click(object sender, System.EventArgs e)
{
this.button1.PerformClick();
}


只能通过Button.PerformClick()函数来编程触发Button.Click事件,.NET不允许直接通过button1.Click(this,e)来触发该事件。

.NET中一个类的所有通过event关键字定义的事件(无论是public或protected),都只能在这个类本身的method里面出发(raise)。在类的外部(无论是外部函数还是子类),都不允许直接通过执行Delegate的方法来出发事件。

.NET之所以做这样的规定,原因是如果允许外部类(尤其是子类)任意触发基类的event,会使基类的event的安全无法得到保证。

希望前面的错误解答没有造成什么危害...


...全文
55 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lkal4587 2002-10-30
  • 打赏
  • 举报
回复
Button1_Click(sender,e);

TheAres 2002-10-30
  • 打赏
  • 举报
回复
谢谢你啊,其实都是你出的力。
hillwell 2002-10-30
  • 打赏
  • 举报
回复
看来结贴太及时反而不好,这不,班兄还得自己掏腰包发帖子解决为决问题

建议兄弟发贴时预计结贴时间,结贴前预告,反对结贴声明。

班兄,看到你今天终于当上班主,我真的很高兴呀---好比非洲穷国把中国

抬进联合国:-)
yarshray 2002-10-30
  • 打赏
  • 举报
回复
3. Button1_Click(object sender,null);

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧