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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM