日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#?多窗口委托通信的實現_C#教程

作者:葉子丶de花 ? 更新時間: 2022-06-01 編程語言

窗口之間通信無非有兩個方向,主窗口發送數據到副窗口,副窗口發送數據到主窗口。

代碼在最下面,先看一下解決的思路。

首先是簡單的主窗口傳數據到副窗口。

在副窗口創建一個函數,必須是public修飾的?。?!,入口參數可以任意設置。

然后主窗體創建副窗體,直接調用副窗口函數即可實現數據傳輸。

藍框就是創建的窗口句柄的,等于已經創建了一個新窗口(我個人是喜歡全局創建窗口,在后面可以直接判斷IsHandleCreated就可以知道窗口是否已經被打開了,沒打開就再實例化一個,如果已經創建,在紅框中判斷是否最小化,然后正常顯示窗口并置頂。)。

黃框就是顯示這個窗口第二行就是添加委托任務的,但是現在還不需要,所以這句可以暫時忽略,后面會說。第三句就是將數據同步到副窗口,然后下一句顯示窗口。

然后是副窗口傳數據到主窗口。

需要使用委托。上述的主窗口到副窗口也可以用委托。

需要現在副窗口內創建委托事件。箭頭所指的部分可以自定義名稱,入口參數也可以自定義。

第一行先創建,第二行對應到具體使用的函數名稱。

然后直接使用F_MoreSend_SyncData_To_Main(); 加參數即可傳數據到主窗口。

調用以下函數發送數據到主窗口。?

這只是副窗口的設置,還需要設置主窗口程序。

主窗體需要創建一個名稱不同的但是參數和參數名稱都一樣的函數,此函數會映射到副窗口中的發送函數。副窗口發來的數據會在此函數內處理。

此外主窗體顯示副窗口之前還需要將上述的兩個映射函數對應起來。

完整代碼

副窗口:

//*創建委托任務
public delegate void Form_MoreSend_SyncData_To_Form_Main(byte flag, byte count, string data);
public event Form_MoreSend_SyncData_To_Form_Main F_MoreSend_SyncData_To_Main;
//*發送數據
F_MoreSend_SyncData_To_Main(0, 0, "01 23 45 67 89");
 
 
//*同步主窗口數據
public void F_MoreSend_SyncData_From_From_Main(byte flag, byte count, string data)
{
}

主窗體:

//*處理副窗口數據
public void Form_SyncData_From_MoreSend(byte flag, byte count, string data)
{
}
 
//*創建窗口
Form_MoreSend F_MoreSend = new Form_MoreSend();
 
//*按鍵打開窗口
private void Button_MoreSendData_Click(object sender, EventArgs e)
{
    if (!F_MoreSend.IsHandleCreated) //*未打開則打開
    {
        F_MoreSend = new Form_MoreSend();
		//*建立映射關系,接收副窗口數據
        F_MoreSend.F_MoreSend_SyncData_To_Main += Form_SyncData_From_MoreSend;
//*發送數據到副窗口
        F_MoreSend.F_MoreSend_SyncData_From_From_Main(0, 0, "");
        F_MoreSend.Show();
    }
    else if (F_MoreSend.IsHandleCreated) //*已打開則顯示
    {
        if (F_MoreSend.WindowState == FormWindowState.Minimized)
        {
            F_MoreSend.WindowState = FormWindowState.Normal;
        }
        //F_MoreSend.Focus();
        F_MoreSend.TopMost = true;
        F_MoreSend.TopMost = false;
    }
}

原文鏈接:https://blog.csdn.net/qq_43588817/article/details/123774436

欄目分類
最近更新