参与过hillwell (天子门生)的 “如何解决运行多个程序实例问题?”朋友请留步,有个bug请注意。
原帖子在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的安全无法得到保证。
希望前面的错误解答没有造成什么危害...