C# 多窗口委托通信的实现
作者:叶子丶de花 发布时间:2023-01-22 02:21:31
标签:C#,多窗口,委托通信
窗口之间通信无非有两个方向,主窗口发送数据到副窗口,副窗口发送数据到主窗口。
代码在最下面,先看一下解决的思路。
首先是简单的主窗口传数据到副窗口。
在副窗口创建一个函数,必须是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


猜你喜欢
- 前言有人说Gradle使用groovy语言编写,简单,明了没像maven使用xml臃肿,其实我倒不觉得,我觉得maven挺好的,管理jar依
- 本文实例讲述了android通过Location API显示地址信息的实现方法。分享给大家供大家参考。具体如下:android的Locati
- 迪杰斯特拉算法迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算
- 1.概述:C语言中的单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。链表中最简单的一种
- 先看看效果图:源码下载:Android Navigation TabBar控件实现多彩标签栏代码:MainActivity.javapack
- 结构:安装NuGet包:using SAP.Middleware.Connector;using System.Data;namespace
- spring-data-redis简介spring-data-redis是spring-data模块的一部分,专门用来支持在spring管理
- 1. 概述在 Spring Security 5.2 中增强了 DSL 的功能:允许使用 Lambda 表达式来配置 HTTP securi
- 一、在java中遍历一个文件夹里边的所有文件,可以有两种方式:1.递归遍历,通常也是开发者第一时间能想到的方法,递归遍历的优点是:实现起来相
- privatestring[]GetMoc() { string[]str=newstring[3]; ManagementClassmcC
- 前言我们很多小伙伴平时都是做JAVA开发的,那么作为一名合格的工程师,你是否有仔细的思考过JVM的运行原理呢。如果懂得了JVM的运行原理和内
- PipedWriter和PipedReader源码分析1. PipedWriter 源码(基于jdk1.7.40) package
- 你是否遇到过,出现异常的时候也需要给一个默认值,让程序可以继续运行下去?一般的做法就是 一个达到try catch,然后在finally里面
- 本文实例为大家分享了Android开发之自定义闹钟实现,供大家参考,具体内容如下闹钟时间设置及显示闹钟的布局很简单,就是一个简单时间设置,所
- 前言终于来到了Maven的插件开发,其实Maven的插件并没有想象的那么难,刚开始讲Maven基础的时候就演示了一下JDK是如何打包的,Ma
- 1.android 消息循环有4个重要的类Handler、Message、Looper、MessageQueuehandler 用来发送、处
- 本文实例讲述了C#设计模式之Builder生成器模式解决带老婆配置电脑问题。分享给大家供大家参考,具体如下:一、理论定义生成器模式 又叫:建
- 本文实例讲述了C#使用IComparer自定义List类实现排序的方法。分享给大家供大家参考。具体如下:List类中不带参数的Sort函数可
- 智能终端上的游戏目前风头正劲,试问哪个智能手机上没有几款企鹅公司出品的游戏呢!之前从未涉猎过游戏开发,但知道游戏开发前要挑选一款合适的游戏引
- Jakarta commons fileupload组件可以处理HTTP请求及响应,很多时候被用来处理文件上传,但是近期发现,当我们自定义文