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,剩下的不用管,系统会自动实现委托机制