LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#delegate(委托)实现主窗体与子窗体数据交互

admin
2025年3月17日 14:39 本文热度 406
主窗体接收子窗体消息

1、声明委托,要放在类的外面,在主窗体还是子窗体声明都可以;

2、根据委托编写具体方法(在调用的类中写);

3、创建委托变量(谁使用谁创建,即发送方);

4、关联具体方法(委托变量和具体方法关联)(在调用的类中紧跟着对象的类写);

 左边是第3步delegate声明的委托变量,右边是第2步编写的方法

5、使用委托变量调用关联的方法(在哪里使用,在哪里写,即和委托变量在一个类中)。

 即用第3步的委托变量替换第2步的方法名称,并传递具体参数

主窗体向子窗体发送消息

1、声明委托,要放在类的外面,在主窗体还是子窗体声明都可以;

2、编写具体方法;

3、创建委托变量(那里使用那里定义);

4、关联具体方法(委托变量和具体方法关联)(在调用的类中紧跟着对象的类写);

 左边是第3步delegate声明的委托变量,右边是第2步编写的方法

5、使用委托变量调用关联的方法。

 即用第3步的委托变量替换第2步的方法名称,并传递具体参数


 创建一个子窗体FrmChild
代码如下

namespace _003_基于Delegate实现窗体间信息交互

{

    public partial class FrmChild : Form

    {

        public FrmChild(string childName)

        {           

            InitializeComponent();

            this.Text += childName;//子窗体名称后

        }

        #region 主窗体接收子窗体消息

        //【主窗体接收子窗体消息****】3-创建委托变量(谁使用谁创建,即发送方)

        public delRecMsg Recmsg;


        private void btSend_Click(object sender, EventArgs e)

        {

            //【主窗体接收子窗体消息****】5-使用委托变量调用关联的方法(在哪里使用,在哪里写,即和委托变量在一个类中)

            //这里面传的变量相当于使用delSendMsg(string msg,string childName)

            Recmsg(this.txtChildSendMsg.Text.Trim(), this.Text);

        }

        #endregion


        #region 主窗体向子窗体发送消息

        //【****主窗体向子窗体发送消息】2-编写具体方法

        public void PassMsg(string msg)

        {

            this.txtChildRecMsg.Text = msg;

        }

        #endregion

    }

}

主窗体
代码如下

namespace _003_基于Delegate实现窗体间信息交互

{

    //子窗体向主窗体发送数据,主窗体接收数据,在主窗体中可以通过delSendMsg方法实现信息接收,

    //但是子窗体不能直接访问delSendMsg方法,且子窗体的信息不能直接给到msg,所以需要通过委托的方式来实现

    //【主窗体接收子窗体消息****】1-声明委托,要放在类的外面,在主窗体还是子窗体声明都可以

    public delegate void delRecMsg(string Recmsg,string childName);

    //【****主窗体向子窗体发送消息】1-声明委托,要放在类的外面,在主窗体还是子窗体声明都可以

    public delegate void delSendMsg(string Sendmsg);


    public partial class FrmMain : Form

    {

        public FrmMain()

        {

            InitializeComponent();

        }

        #region 主窗体接收子窗体消息        

        //【主窗体接收子窗体消息****】2-根据委托编写具体方法(在调用的类中写)

        private void ShowMsg(string msg,string childName)

        {

            this.txtMainRecieveMsg.Text += $"{childName}的消息:{msg}\r\n";//回车换行

        }

        private void btFrmChild_Click(object sender, EventArgs e)

        {


            for (int i = 1; i < 4; i++)

            {

                FrmChild frmChild = new FrmChild($"这是第{i}个子窗体");//创建子窗体时给子窗体添加标题

                frmChild.Show();

                //【主窗体接收子窗体消息****】4-关联具体方法(委托变量和具体方法关联)(在调用的类中紧跟着对象的类写)

                //将委托变量的与方法进行关联,左边是委托变量,右边是方法            

                frmChild.Recmsg += ShowMsg;

                //【****主窗体向子窗体发送消息】4-关联具体方法(委托变量和具体方法关联)(在调用的类中紧跟着对象的类写)

                SendMsg += frmChild.PassMsg;

                //每次创建窗体时把窗体加到list集合中

                this.list.Add(frmChild);

            }           

        }

        #endregion


        #region 主窗体向子窗体发送消息

        //【****主窗体向子窗体发送消息】3-创建委托变量(那里使用那里定义)

        private delSendMsg SendMsg;

        private void btMainSend_Click(object sender, EventArgs e)

        {

            //【****主窗体向子窗体发送消息】5-使用委托变量

            //相当于调用子窗体的PassMsg方法

            SendMsg(this.txtMainSendMsg.Text);

        }

        #endregion


        private void btClear_Click(object sender, EventArgs e)

        {

            this.txtMainRecieveMsg.Clear();

            this.txtMainSendMsg.Clear();

        }

        //创建集合存放子窗体

        private List<Form> list=new List<Form>();

        private void btCloseChild_Click(object sender, EventArgs e)

        {

            foreach (Form frm in list)

            {

                frm.Close();

            }

        }

    }

}


该文章在 2025/3/17 14:54:06 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved