C# 多窗口委托通信的实现

 更新时间:2022年03月30日 08:50:24   作者:叶子丶de花  
本文主要介绍了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;
    }
}

到此这篇关于C# 多窗口委托通信的实现的文章就介绍到这了,更多相关C# 多窗口委托通信内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • WPF调用WindowsAPI实现屏幕录制

    WPF调用WindowsAPI实现屏幕录制

    这篇文章主要为大家详细介绍了WPF如何调用WindowsAPI实现屏幕录制,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下
    2023-05-05
  • C#/VB.NET实现在PDF文档中创建表格

    C#/VB.NET实现在PDF文档中创建表格

    表格是一种直观高效的数据展示方式,可以按行和列的形式呈现数据,从而更容易吸引读者的注意,本文将介绍如何使用 Spire.PDF for .NET 通过 .NET 程序在 PDF 文档中创建表格,需要的可以参考下
    2023-12-12
  • 解析在C#中接口和类的异同

    解析在C#中接口和类的异同

    今天小编就为大家分享一篇关于解析在C#中接口和类的异同,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • C# 多线程中经常访问同一资源可能造成哪些问题

    C# 多线程中经常访问同一资源可能造成哪些问题

    这篇文章主要介绍了C# 多线程中经常访问同一资源可能造成哪些问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • C#实现老板键功能的代码

    C#实现老板键功能的代码

    最近在做项目中遇到需要增加个老板键功能,找一惯的方式,开始从网络下手寻找: 关键字类似”C# 老板键“,一搜,一堆又一堆,然而出来的代码大多数都不是太合适,下面给大家分享下自己的解决方案已经一个网友的解决方案,有需要的小伙伴可以参考下。
    2015-05-05
  • C#固定大小缓冲区及使用指针复制数据详解

    C#固定大小缓冲区及使用指针复制数据详解

    这篇文章主要为大家介绍了C#固定大小缓冲区及使用指针复制数据详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 一个读写csv文件的C#类

    一个读写csv文件的C#类

    这篇文章主要为大家详细介绍了一个读写csv文件的C#类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • C#交错数组浅析

    C#交错数组浅析

    这里介绍C#交错数组,数组是具有同一类型的一组值,数组是引用类型的,因此存在内存堆中。数组中的元素值可以在定义数组时赋予,也可以在定义数组后对单个元素进行赋值
    2012-09-09
  • C# 如何调用C++ dll string类型返回

    C# 如何调用C++ dll string类型返回

    这篇文章主要介绍了C# 如何调用C++ dll string类型返回问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • c#基础——了解程序结构

    c#基础——了解程序结构

    这篇文章主要介绍了c# 程序结构的相关资料,文中讲解非常细致,帮助大家更好的理解和学习C#,感兴趣的朋友可以了解下
    2020-07-07

最新评论