首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

事件的两种调用方法有什么区别解决方案

2012-03-19 
事件的两种调用方法有什么区别代码如下:C# codeprivate void Form1_Load(object sender, EventArgs e){Thr

事件的两种调用方法有什么区别
代码如下:

C# code
private void Form1_Load(object sender, EventArgs e)        {            Thread thread = new Thread(conn);            thread.Start();        }        private void conn()        {            for (int i = 0; i < 10; i++)            {                MessageBox.Show(i.ToString());            }            this.Invoke(new CallBack(DoCallBack),new object[] {true});        }        public void DoCallBack(bool isSuccess)        {            if (isSuccess)            {                //button1.Click += new EventHandler(button1_Click);//第一种方法                button1_Click(null, null);  //第二种方法            }            else            {                MessageBox.Show("数据加载失败");            }        }        public delegate void CallBack(bool isSuccess);        private void button1_Click(object sender, EventArgs e)        {            MessageBox.Show("测试成功");        }

我在DoCallBack中调用button1的事件为什么第一种写法不会执行,第二种可行。能不能解释一下呀

[解决办法]
第一种只是注册时间,并不是调用
[解决办法]
第一种只是注册时间,并不是调用
[解决办法]
第一种写法是把函数button1_Click注册为button1点击事件函数
第二种写法是调用button1_Click函数
两种写法的意义是不一样的
[解决办法]
探讨

引用:
第一种只是注册时间,并不是调用

那我不使用第二种方式调用,有没有类似第一种注册时间的调用方式。
该如何写的?

[解决办法]
你的意思应该是想调用button1的点击事件函数(不一定是button1_Click),对吧?就是说事件函数发生改变后希望调用的函数也发生改变,是这个意思么?

定义一个委托
public delegate void clickEV(object sender, EventArgs e);
clickEV btnclick;
然后在load事件里面给委托赋值,并加入到事件处理
btnclick=button1_Click;
button1.Click+=btnclick;
然后你就可以通过这个委托调用button1_Click函数了,好处是当你要更改事件函数时,只需要给这个委托重新赋值就可以了,你调用的函数也自动变了就

热点排行