C#?多窗口委托通信的實(shí)現(xiàn)
窗口之間通信無非有兩個(gè)方向,主窗口發(fā)送數(shù)據(jù)到副窗口,副窗口發(fā)送數(shù)據(jù)到主窗口。
代碼在最下面,先看一下解決的思路。
首先是簡單的主窗口傳數(shù)據(jù)到副窗口。
在副窗口創(chuàng)建一個(gè)函數(shù),必須是public修飾的?。?!,入口參數(shù)可以任意設(shè)置。
然后主窗體創(chuàng)建副窗體,直接調(diào)用副窗口函數(shù)即可實(shí)現(xiàn)數(shù)據(jù)傳輸。
藍(lán)框就是創(chuàng)建的窗口句柄的,等于已經(jīng)創(chuàng)建了一個(gè)新窗口(我個(gè)人是喜歡全局創(chuàng)建窗口,在后面可以直接判斷IsHandleCreated就可以知道窗口是否已經(jīng)被打開了,沒打開就再實(shí)例化一個(gè),如果已經(jīng)創(chuàng)建,在紅框中判斷是否最小化,然后正常顯示窗口并置頂。)。
黃框就是顯示這個(gè)窗口第二行就是添加委托任務(wù)的,但是現(xiàn)在還不需要,所以這句可以暫時(shí)忽略,后面會說。第三句就是將數(shù)據(jù)同步到副窗口,然后下一句顯示窗口。
然后是副窗口傳數(shù)據(jù)到主窗口。
需要使用委托。上述的主窗口到副窗口也可以用委托。
需要現(xiàn)在副窗口內(nèi)創(chuàng)建委托事件。箭頭所指的部分可以自定義名稱,入口參數(shù)也可以自定義。
第一行先創(chuàng)建,第二行對應(yīng)到具體使用的函數(shù)名稱。
然后直接使用F_MoreSend_SyncData_To_Main(); 加參數(shù)即可傳數(shù)據(jù)到主窗口。
調(diào)用以下函數(shù)發(fā)送數(shù)據(jù)到主窗口。
這只是副窗口的設(shè)置,還需要設(shè)置主窗口程序。
主窗體需要創(chuàng)建一個(gè)名稱不同的但是參數(shù)和參數(shù)名稱都一樣的函數(shù),此函數(shù)會映射到副窗口中的發(fā)送函數(shù)。副窗口發(fā)來的數(shù)據(jù)會在此函數(shù)內(nèi)處理。
此外主窗體顯示副窗口之前還需要將上述的兩個(gè)映射函數(shù)對應(yīng)起來。
完整代碼
副窗口:
//*創(chuàng)建委托任務(wù) 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ā)送數(shù)據(jù) F_MoreSend_SyncData_To_Main(0, 0, "01 23 45 67 89"); //*同步主窗口數(shù)據(jù) public void F_MoreSend_SyncData_From_From_Main(byte flag, byte count, string data) { }
主窗體:
//*處理副窗口數(shù)據(jù) public void Form_SyncData_From_MoreSend(byte flag, byte count, string data) { } //*創(chuàng)建窗口 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(); //*建立映射關(guān)系,接收副窗口數(shù)據(jù) F_MoreSend.F_MoreSend_SyncData_To_Main += Form_SyncData_From_MoreSend; //*發(fā)送數(shù)據(jù)到副窗口 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; } }
到此這篇關(guān)于C# 多窗口委托通信的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C# 多窗口委托通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WPF調(diào)用WindowsAPI實(shí)現(xiàn)屏幕錄制
這篇文章主要為大家詳細(xì)介紹了WPF如何調(diào)用WindowsAPI實(shí)現(xiàn)屏幕錄制,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下2023-05-05C#/VB.NET實(shí)現(xiàn)在PDF文檔中創(chuàng)建表格
表格是一種直觀高效的數(shù)據(jù)展示方式,可以按行和列的形式呈現(xiàn)數(shù)據(jù),從而更容易吸引讀者的注意,本文將介紹如何使用 Spire.PDF for .NET 通過 .NET 程序在 PDF 文檔中創(chuàng)建表格,需要的可以參考下2023-12-12C#固定大小緩沖區(qū)及使用指針復(fù)制數(shù)據(jù)詳解
這篇文章主要為大家介紹了C#固定大小緩沖區(qū)及使用指針復(fù)制數(shù)據(jù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12C# 如何調(diào)用C++ dll string類型返回
這篇文章主要介紹了C# 如何調(diào)用C++ dll string類型返回問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11