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

场景

在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 ==0)
            {
                XtraMessageBox.Show("当前路径下没有任务文件");
            }
            else if (taskFileList.Count > 1)
            {
                XtraMessageBox.Show("当前路径下含有多个任务文件");
            }
            else 
            {
               FrmTaskView taskView = new Dialog.FrmTaskView();
                taskView.Show();
                //触发查看任务事件
                TriggerTaskView(taskFileList[0]);
            }

 

进行逻辑的判断和触发

在触发器中触发事件

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;
        }

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值