已有56人关注
C#开发委托
发表在C#图书答疑 2010-12-15
是否精华
版块置顶:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 委托列表
{
    public partial class Form1 : Form
    {
       public  delegate void MyDelegate(string text);
       MyDelegate mainDelegate;
        private void method1(string text)
        {
            textBox1.AppendText("方法一被调用(" + text + ")\r\n");
        }
        private void method2(string text)
        {
            textBox1.AppendText("方法二被调用(" + text + ")\r\n");
        }
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (mainDelegate == null)
            {
                mainDelegate = this.method1;
            }
            else
            {
                   mainDelegate = mainDelegate + new MyDelegate(method1);
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            if (mainDelegate == null)
            {
                mainDelegate = this.method2;
            }
            else
            {
                mainDelegate+=method2;
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            if (mainDelegate == null)
                return;
            mainDelegate -= method1;
        }
        private void button4_Click(object sender, EventArgs e)
        {
            if (mainDelegate == null)
                return;
            else 
            mainDelegate -= method2;
        }
        private void button5_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
            textBox1.AppendText("调用列表\r\n");
            foreach (MyDelegate del in mainDelegate.GetInvocationList())
            {
                textBox1.AppendText(del.Method.Name + "\r\n");
             }
            textBox1.AppendText("================================================\r\n");
            mainDelegate("传递给委托的参数");
         }
    }
}
小科老师,不是点button3,是点button5。我刚开始点击button1,然后点击button5,结果列表有个方法,然后我再点击button1,再点击button5,列表有出现一个方法。接着我点击button3,然后点击button5,列表被删除了一个方法,列表还剩一个没删除,我这个时候再点击button3,然后点击button5,就报错了,错误就是:具体错误为:未将对象引用设置到对象的实例。请问这是什么问题呢?

希望我说的清楚了,请指点,小科老师!
分享到:
精彩评论 2
heibao
学分:0 LV1
TA的每日心情
开心
2022-07-07 18:01:50
2010-12-15
沙发
错误的语句是 foreach (MyDelegate del in mainDelegate.GetInvocationList())
小科_mrkj
学分:43 LV2
2010-12-15
板凳
读者朋友:
    您好,在button5里面首先判断一下mainDelegate是否为空,然后再执行下面的操作。
首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照