C#--運動控制--指示燈閃爍和系統復位(兩個子窗體交互:一個子窗體按鈕控制另外一個子窗體的方法)


以下是學習筆記

思路:

定時器 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);

  

 

 

  

 


免責聲明!

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



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