使用委托在winform实现跨页面操作

主页面

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            SubFrm subFrm = new SubFrm(); //初始化时新建副页面
            subFrm.dAdd += AddCount; //将主页面的方法(函数)通过委托传给副页面创建的委托实例
            this.maindeleAdd += subFrm.SubAdd; //将副页面的方法(函数)通过委托传给主页面创建的委托实例
            subFrm.Show();
        }

        //在主界面创建一个委托实例, 用来添加副页面的方法
        public deleAdd maindeleAdd;

        //用副页面按钮给主页面增加变量,
        //创造一个方法(函数)AddCount,用来给本页面(主)的可视化界面赋值
        public void AddCount(string count)
        {
            this.label1.Text = count;
        }

        //用主页面按钮给副页面增加变量
        int mainCount = 0;
        private void mainBtn_Click(object sender, EventArgs e)
        {
            mainCount++;
            maindeleAdd(mainCount.ToString());
        }    
    }
    public delegate void deleAdd(string count);
}

副页面

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Test
{
    public partial class SubFrm : Form
    {
        public SubFrm()
        {
            InitializeComponent();
            
        }

        public deleAdd dAdd; //创建副页面的委托实例,用来添加主页面的方法


        int count = 0;

        //用副页面按钮给主页面增加变量,

        private void btn1_Click(object sender, EventArgs e)
        {
            count++;
            if (dAdd != null)
            {
                dAdd(count.ToString());
            }

        }
        //创造一个方法(函数)SubAdd, 用来给本页面(副)的可视化界面赋值
        public void SubAdd (string count)
        {
            this.SubLabel.Text = count;
        }

    }



    
}

主页面同时给3个副页面发消息

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Demo2
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();

            FrmOther01 objFrm01 = new FrmOther01();
            FrmOther02 objFrm02 = new FrmOther02();
            FrmOther03 objFrm03 = new FrmOther03();

            //将委托变量和具体方法关联
            this.msgSender += objFrm01.Receiver;
            this.msgSender += objFrm02.Receiver;
            this.msgSender += objFrm03.Receiver;

            objFrm01.Show();
            objFrm02.Show();
            objFrm03.Show();

        }

        //根据委托创建委托对象
        public ShowCounter msgSender;

        private int counter = 0;

        private void btnClick_Click(object sender, EventArgs e)
        {
            counter++;
            //同时对三个从窗体发消息
            this.msgSender.Invoke(counter.ToString());
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            counter = 0;
            this.msgSender("0");
        }
    }

    //【1】声明委托
    public delegate void ShowCounter(string counter);
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Demo2
{
    public partial class FrmOther01 : Form
    {
        public FrmOther01()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 接收委托传递的信息
        /// </summary>
        /// <param name="counter"></param>
        public void Receiver(string counter)
        {
            this.lblCount.Text = counter;
        }
    }
}


using static FrmMainTest.Frm2;

namespace FrmMainTest
{
    public partial class FrmMain1 : Form
    {
        public FrmMain1()
        {
            InitializeComponent();
            frm2 = new Frm2();
            frm2.Show();
            this.maindeleAdd += frm2.SubAdd;
        }
        private Frm2 frm2;
        public deleAdd maindeleAdd;
        private void btn1_Click(object sender, EventArgs e)
        {

        }

        private void btn2_Click(object sender, EventArgs e)
        {
            frm2.Close();
        }
        int mainCount = 0;
        private void btn3_Click(object sender, EventArgs e)
        {
            mainCount++;
            maindeleAdd(mainCount.ToString());
        }
    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FrmMainTest
{
    public partial class Frm2 : Form
    {
        public Frm2()
        {
            InitializeComponent();
        }
        

        public delegate void deleAdd(string count);



        public void SubAdd(string count)
        {
            this.textBox1.Text = count;
        }
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘诺西亚的火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值