以下是學習筆記
思路:
定時器 System.Timer.Timer
過程狀態 ProcessState 1 存料 -1 取料 0正常
要實現的功能:
系統復位:兩個子窗體之間交互:【手動窗體】(子窗體)的復位按鈕來復位【監控窗體】(子窗體)的狀態
兩種方法:
【1】方法1: 雙重委托,通過一個媒介(主窗體)把兩個子窗體關聯起來
【2】方法2:靜態的委托對象
方法1:雙重委托,通過一個媒介(主窗體)把兩個子窗體關聯起來
【1.1】,執行者中要有一個執行的方法:監控窗體(子窗體):新建一個系統復位的方法
/// <summary> /// 監控窗體中:系統復位的方法 /// </summary> public void SystemReset() { //復位操作 AlarmInfoList = new List<string>(); RefreshAlarm(); }
【1.2】,主窗體:創建一個為委托和方法
//主窗體:創建一系統復位的委托 private Action SystemReset;
/// <summary> /// 主窗體中:系統復位的方法 /// </summary> private void SysReset() { //執行主窗體中的SystemReset委托 this.SystemReset?.Invoke(); }
【1.3】,手動窗體(子窗體):創建一個為委托和方法
//手動窗體:創建一個系統復位委托對象 public Action SystemReset;
/// <summary> /// 手動窗體的復位按鈕 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_reset_Click(object sender, EventArgs e) { //調用手動窗體的SystemReset委托 this.SystemReset?.Invoke(); }
【1.4】,手動窗體的復位按鈕--》調用手動窗體的復位委托--》調用主窗體的復位方法--》調用主窗體的復位委托--》監控窗體的復位方法
方法2:靜態的委托對象
【2.1】,執行者中要有一個執行的方法:監控窗體(子窗體):新建一個系統復位的方法
/// <summary> /// 監控窗體中:系統復位的方法 /// </summary> public void SystemReset() { //復位操作 AlarmInfoList = new List<string>(); RefreshAlarm(); }
【2.2】在Program中,創建全局變量,靜態的復位委托
【2.3】主窗體中,打開監控窗體的時候,全局變量靜態委托綁定監控窗體的SystemReset方法
方法2的應用案例:
A窗體調用B窗體的方法
【1】在全局變量GlobalVariable中添加1個靜態委托
/// <summary> /// 設置監控窗體的IO /// </summary> public static Action<string> SetIOAction;
【2】 B窗體
GlobalVariable.SetIOAction += SetOut;
實際執行的方法
public void SetOut(string methodName) { MethodInfo method = GetType().GetMethod(methodName); method.Invoke(this, null); }
【3】A窗體
GlobalVariable.SetIOAction(methodName);