以下是學習筆記
思路:
定時器 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);
