日期:2014-05-17  浏览次数:20865 次

关于使用委托和直接调用方法,实在不明白 求指教
对于使用委托和直接调用方法有什么区别么 ,为什么要使用委托不直接调用方法呢?看了很多资料没明白,初学,求指导,最好能有案例示意一下 多谢多谢

------解决方案--------------------
 
A 窗口打开FT  窗口,FT窗口向A窗口用事件委托传值
     
        private void button1_Click(object sender, EventArgs e)
        {
            FT t = new FT();
            t.sendM += new FT.send(t_sendM);
            t.Show();
        }

        void t_sendM(string mess)
        {
            txtMessage.Text=mess;
        }


FT窗口代码
 
     
public delegate void send(string mess);
       public event send sendM;

        private void button1_Click(object sender, EventArgs e)
        {
            sendM(txtSend.Text);
        }

------解决方案--------------------
如果可以直接调用那就不用委托了
1楼的例子就是个简单的委托了。
在你打开的窗体触发事件的时候,需要在原窗体中获取到点击的信息,你觉得用原窗体调用下这个函数,会在你点击的时候触发吗?
答案肯定是不能。
所以定义委托,委托别人去给你做。就是这个意思...
不知楼主是否理解
------解决方案--------------------
看这个对象是否有

   +=...
如果没有+=DelClick就为空了.

  if (DelClick != null)
                DelClick(sender, new EventArgs());


------解决方案--------------------
关于委托,我也是最近才弄明白一些
委托主要用于跨线程调用控件

比如一个窗体,里面有一个进度条,一个按钮,按钮执行一个方法,进度条来显示进度。

如果不用线程,按下按钮时,会出现界面假死,用了线程,就无法直接调用进度条(在MSDN上看,不让这样调用的原因是出于保密性问题,在.net 2.0以后更新的)

改写后就是定义一个委托(参数根据需要委托的方法设定),再定义一个调用进度条的方法,通过委托把参数传递给进度条的方法。

声明一个委托很简单,比如 public delegate void SetProg(int max, int progvalue);//这就是一个调用进度条的委托(进度条有2个参数所以委托也定义了两个),再写一个调用进度条的方法
 private void SetProg(int max,int progvalue)
        {
            if( progressBar1 .InvokeRequired) 
            {
                SetTextInvoke myInvoke = new SetTextInvoke(SetProg);
                this.Invoke(myInvoke, new object[] { m