场景

在Winfom中可以在页面上多个按钮或者右键的点击事件中触发同一个自定义的委托事件。

实现

在位置一按钮点击事件中触发

string parentPath = System.IO.Directory.GetParent("指定路径").ToString();
//获取指定路径的父级目录并作为参数调用工具类的方法
DataTreeListHelper.TaskView(parentPath);

在位置二右键点击触发

将自定义右键的方法定义在上面的工具类中,在工具类中直接调用触发的方法

System.Windows.Forms.MenuItem mnuTaskView = new System.Windows.Forms.MenuItem();
mnuTaskView.Text = "查看任务";
mnuTaskView.Click += delegate(object s, EventArgs ea)
{
string parentPath = Directory.GetParent(strIdValue).ToString();
TaskView(parentPath); };

在工具类中的触发的方法中

public static void TaskView(string currentPath)
{
//判断当前路径下是否有任务文件
List<string> taskFileList = FileHelper.GetFileListWithExtend(new DirectoryInfo(currentPath), "*.pcj");
if(taskFileList == null || taskFileList.Count ==)
{
XtraMessageBox.Show("当前路径下没有任务文件");
}
else if (taskFileList.Count > )
{
XtraMessageBox.Show("当前路径下含有多个任务文件");
}
else
{
FrmTaskView taskView = new Dialog.FrmTaskView();
taskView.Show();
//触发查看任务事件
TriggerTaskView(taskFileList[]);
}

进行逻辑的判断和触发

在触发器中触发事件

public static void TriggerTaskView(string taskPath)
{
if (OnTaskView != null)
{
OnTaskView(taskPath);
}
}

在当前工具类中自顶义委托和事件

public delegate void TaskViewDelegete(string taskPath);
public static event TaskViewDelegete OnTaskView;

再要执行事件的窗体的构造方法中进行事件的订阅

public FrmTaskView()
{
InitializeComponent();
DataTreeListHelper.OnTaskView -= DataTreeListHelper_OnTaskView;
DataTreeListHelper.OnTaskView += DataTreeListHelper_OnTaskView;
}

编写具体实现的业务逻辑

 private void DataTreeListHelper_OnTaskView(string taskPath)
{
if (taskPath != null)
{
this.taskUserControl1.InitialTaskUserControl(taskPath);
}
}

为了以防事件没法解除订阅,在窗口关闭事件中进行事件的取消订阅

private void FrmTaskView_FormClosing(object sender, FormClosingEventArgs e)
{
DataTreeListHelper.OnTaskView -= DataTreeListHelper_OnTaskView;
}

C#中在多个地方调用同一个触发器从而触发同一个自定义委托的事件的更多相关文章

  1. C#中委托和事件

    目 录 将方法作为方法的参数 将方法绑定到委托 更好的封装性 限制类型能力 范例说明 Observer 设计模式简介 实现范例的Observer 设计模式 .NET 框架中的委托与事件 为什么委托定义 ...

  2. c#中委托和事件(转)

    C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真 ...

  3. 通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制

    通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制 前言说明 本篇为网易云课堂Linux内核分析课程的第四周作业,我将通过调用C语言的库函数与在C代码中 ...

  4. PL/Sql 中创建、调试、调用存储过程

    存储过程的详细建立方法 1.先建存储过程 左边的浏览窗口选择 procedures ,会列出所有的存储过程,右击文件夹procedures单击菜单"new",弹出 template ...

  5. 关于Java中基类构造器的调用问题

    在<Java编程思想>第7章复用类中有这样一段话,值得深思.当子类继承了父类时,就涉及到了基类和导出类(子类)这两个类.从外部来看,导出类就像是一个与基类具有相同接口的新类,或许还会有一些 ...

  6. java基础 题和知识点总结, 关于String s是否默认初始化为null......,new一个对象和类静态域,是不是在内存中不是一个地方

    一道笔试题 22. 下面代码的运行结果为:() import java.io.*; import java.util.*; public class foo{ public static void m ...

  7. java中静态方法和非静态方法调用的一点小困扰,已解决。

    public static void main(String[] args) { // TODO Auto-generated method stub SimpleGui1B gui=new Simp ...

  8. 2、pytest中文文档--使用和调用

    目录 使用和调用 通过python -m pytest调用pytest *pytest执行结束时返回的状态码 pytest命令执行结束,可能会返回以下六种状态码: *获取帮助信息 最多允许失败的测试用 ...

  9. WPF中实例化Com组件,调用组件的方法时报System.Windows.Forms.AxHost+InvalidActiveXStateException的异常

    WPF中实例化Com组件,调用组件的方法时报System.Windows.Forms.AxHost+InvalidActiveXStateException的异常 在wpf中封装Com组件时,调用组件 ...

随机推荐

  1. vue路由基础总结

    1.创建项目 为了练习路由 这里没有选择路由 就选了Bable 自己一步一步的配置 加深印象. 然后下载路由 npm install vue-router --save 2.基础配置 src文件下新建 ...

  2. SpringBoot内容聚合

    分类整理一些内容,方便需要时回过头来看,整理不易,如有疏漏,请多担待!之后要查看这篇文章,公众号后台回复 “Springboot聚合” SpringBoot+Mybatis多模块(module)项目搭 ...

  3. SpringCloud-使用熔断器防止服务雪崩-Ribbon和Feign方式(附代码下载)

    场景 SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  4. Android框架式编程之架构方案

    目前移动端应用市场已经是百花齐放,很多独角兽公司都是通过App创业发展起来的,现在App类型更加丰富,功能越来越完善,基本上涵盖了各个行业的每个角落.为了开发出更加有竞争力的App,不仅需要功能上有创 ...

  5. Nuxt+Vuex初体验

    小呀嘛小二郎,背着书包上学堂... 今天一个困扰了我一周时间的问题终于被我解决了,值得庆祝 在Nuxt中使用Vuex实现数据存储 首先: 在store目录下新建一个index.js文件 需要有两个组件 ...

  6. JS中遍历对象属性的四种方法

    Object.keys().Object.values().Object.entries().for...in.Map (1)Object.keys(): let ex1 = {c1: 'white' ...

  7. python爬虫学习心得:中国大学排名(附代码)

    今天下午花时间学习了python爬虫的中国大学排名实例,颇有心得,于是在博客园与各位分享 首先直接搬代码: import requests from bs4 import BeautifulSoup ...

  8. Vue-Cli 3.0 中配置高德地图

    vue 中使用高德地图有两种方式 一.vue-amap 组件 官网: https://elemefe.github.io/vue-amap/#/ 开始的时候是打算用这个组件做地图功能的,但是尝试之后存 ...

  9. 复杂的POI导出Excel表格(多行表头、合并单元格)

    poi导出excel有两种方式: 第一种:从无到有的创建整个excel,通过HSSFWorkbook,HSSFSheet HSSFCell, 等对象一步一步的创建出工作簿,sheet,和单元格,并添加 ...

  10. 基于Redis扩展模块的布隆过滤器使用

    什么是布隆过滤器?它实际上是一个很长的二进制向量和一系列随机映射函数.把一个目标元素通过多个hash函数的计算,将多个随机计算出的结果映射到不同的二进制向量的位中,以此来间接标记一个元素是否存在于一个 ...