網站首頁 編程語言 正文
窗口之間通信無非有兩個方向,主窗口發送數據到副窗口,副窗口發送數據到主窗口。
代碼在最下面,先看一下解決的思路。
首先是簡單的主窗口傳數據到副窗口。
在副窗口創建一個函數,必須是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
相關推薦
- 2023-04-10 Android序列化接口Parcelable與Serializable接口對比_Android
- 2022-04-17 Security前后端分離自定義登錄詳解
- 2022-09-13 Android實現縮放動畫_Android
- 2022-07-07 go語言心跳超時的實現示例_Golang
- 2022-06-22 Android實現歡迎滑動頁面_Android
- 2023-03-28 python?label與one-hot之間的互相轉換方式_python
- 2022-04-03 Python-Selenium自動化爬蟲_python
- 2023-07-26 node中的內置模塊path和fs
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支