场景

在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. windows环境下Git的安装部署

    一.获取安装包 百度搜索“git”,或者访问git官网:https://git-scm.com/,在首页中点击“downloads”进入下载页面 点击“windows”,获取安装包 二.安装部署 双击 ...

  2. c++-重载等号,数组,指针,字符串类

    重载 重载=操作符 1先释放旧对象资源 2用一个对象=给另外一个对象 3函数返回值当左值 返回一个引用 4 数组类 Array& operator=(Array& a1); 5 字符串 ...

  3. 开源框架 openFrameworks

    转自:https://www.cnblogs.com/lidabo/p/9134174.html 此处仅供学习,版权属原作者: 作为一个图形图像方向的研究生,我经常都在和 OpenGL .OpenCV ...

  4. JQuery 基本使用、操作样式、简单动画

    JQ与JS JQ是JS写的插件库,就是一个JS文件 凡是用JQ能实现的,JS都能实现,JS能实现的,JQ不一定能实现 引入 BootCDN:https://www.bootcdn.cn/jquery/ ...

  5. keras 添加L2正则 和 dropout层

    在某一层添加L2正则: from keras import regularizer model.add(layers.Dense(..., kernel_regularizer = regulariz ...

  6. 初探爬虫 ——《python 3 网络爬虫开发实践》读书笔记

    零.背景 之前在 node.js 下写过一些爬虫,去做自己的私人网站和工具,但一直没有稍微深入的了解,借着此次公司的新项目,体系的学习下. 本文内容主要侧重介绍爬虫的概念.玩法.策略.不同工具的列举和 ...

  7. C# 读写倍福plc beckhoff , 使用ADS协议实现读取plc

    本文将使用库技术来读写倍福PLC数据,使用的是基于以太网的ADS实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 github地址:https://g ...

  8. 工厂模式-C#改良实现

    参考了下网上的工厂模式实现,总的来说例子还是OK得,但是示例太单一了,因此我做了下优化的改良实现. namespace DP { public interface ICreditCard { stri ...

  9. 【坑】Maven [ERROR] 不再支持源选项 5。请使用 6 或更高版本

    在pom.xml文件中添加如下代码: 注意:jdk使用自己下载的版本,我的是13 <properties> <project.build.sourceEncoding>UTF- ...

  10. SSM(SpringMVC+Spring+MyBatis)三大框架使用Maven快速搭建整合(实现数据库数据到页面进行展示)

    本文介绍使用SpringMVC+Spring+MyBatis三大框架使用Maven快速搭建一个demo,实现数据从数据库中查询返回到页面进行展示的过程. 技术选型:SpringMVC+Spring+M ...