C#中的委托调用(显示委托订阅式)

1.前篇文章采用最直接的方式,不使用事件发布订阅机制,直接绑定,本篇将使用委托的订阅机制来实现和上一篇完全一样的功能。

例子

    //第一步声明委托
    public delegate void OpenFormDelegate(string frmNAme);

    //第二步 创建事件
     public event OpenFormDelegate OpenFormEvent;

  //第三步订阅对象
        private void OpenFromMethod1(string FrmName)
        {
            //避免重复打开
            DockContent frm = FindDockContent( FrmName);
            if (frm != null)
            {
                frm.BringToFront();//移动到最前面
                frm.Activate();
                return;

            }
            else
            {
                switch (FrmName)
                {
                    case "集中监控":
                        new FormMontior().Show(dockmain);
                        break;
                    case "系统设置":
                        new FormSysSet().Show(dockmain);
                        break;
                    case "系统日志":
                       new FormLog().Show(dockmain);
                        break;
                    case "数据分析":
                        dataStatis.Show(dockmain);
                        break;
                    case "数据记录":
                        dataRecord.Show(dockmain);
                        break;
                    case "用户管理":
                        new UserManage().Show(dockmain);
                        break;
                    default:
                        break;


                }

            }

        }

        private void OpenFromMethod2(string FrmName)
        {

            switch (FrmName)
            {

                case "数据分析":
                    dataStatis.ChangeColorDataRecord();
                    break;
                case "数据记录":
                    dataRecord.ChangeColorDataRecord();
                    break;
                default:
                    break;


            }

        }

  //第四步向事件进行注册
   formGuide.OpenFormEvent += this.OpenFromMethod1;
   formGuide.OpenFormEvent += this.OpenFromMethod2;

//第五步发布时间

        private void but_Montior_Click(object sender, EventArgs e)
        {
            //发布委托
            OpenFormEvent?.Invoke("集中监控");
        }

        private void SystemSet_Click(object sender, EventArgs e)
        {
            //发布委托
            OpenFormEvent?.Invoke("系统设置");
        }

        private void SystemLog_Clik(object sender, EventArgs e)
        {
            //发布委托
            OpenFormEvent?.Invoke("系统日志");
        }

        private void DataStais_Click(object sender, EventArgs e)
        {
            //发布委托
            OpenFormEvent?.Invoke("数据分析");
        }

        private void DataRecord_Clik(object sender, EventArgs e)
        {
            //发布委托
            OpenFormEvent?.Invoke("数据记录");
        }

        private void UserManage_Click(object sender, EventArgs e)
        {
            //发布委托
            OpenFormEvent?.Invoke("用户管理");
        }



采用订阅的方式,更能体现委托功能的发布理念,发布一次事件,所有的订阅者都能收到信息,但是上面的步骤略显繁琐,优化后采用隐式调用,方法如下

    //第一步声明委托
   // 删除 此行 隐式调用 无需声明委托 public delegate void OpenFormDelegate(string frmNAme);

    //第二步 创建事件
  public event Action<string> OpenFormEvent;

只需重新定义 EVENT 类型就ok,剩下的不用管,系统会自动实现委托机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值