C#委托学习:委托实现窗体之间简单传值

实现功能描述:

从窗体点击按钮,并记录点击次数,将点击的次数传递给主窗体展示。

UI设计:

主窗体:拖放两个Label:label1和lblCounter,label1的Text属性设置为“从窗体被点击次数:”,lblCounter的Text属性设置为“0”。从窗体:拖放一个Button:btnAddOne,Dock属性设置为“Fill”。

 

功能实现:

【1】声明委托

    /// <summary>
    /// 【1】声明委托
    /// </summary>
    /// <param name="counter"></param>
    public delegate void AddOneDelegate(string counter);

【2】定义一个实际委托调用的方法,结构和被调用的委托一致

        /// <summary>
        /// 【2】定义一个实际委托调用的方法,结构和被调用的委托一致
        /// </summary>
        /// <param name="counter"></param>
        private void SetValueToUI(string counter)
        {
            lblCounter.Text = counter;
        }

【3】定义一个委托变量,并将实际执行的方法绑定在一起

        public FrmOther(AddOneDelegate addone)
        {
            InitializeComponent();
            //【3】定义一个委托变量,并将实际执行的方法绑定在一起
            this.addOne = addone;
        }   

    
        /// <summary>
        /// 【3】定义一个委托变量
        /// </summary>
        private AddOneDelegate addOne;

【4】调用

        /// <summary>
        /// 点我按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAddOne_Click(object sender, EventArgs e)
        {
            counter++;
            //【4】调用
            this.addOne.Invoke(counter.ToString());
        }

在FrmOther中定义计数器counter,点击的时候,记录一次。并将记录的值通过委托调用的方式传递给主窗体。

        /// <summary>
        /// 计数器
        /// </summary>
        private int counter = 0;

修改FrmOther构造函数的定义,添加一个AddOneDelegate委托参数,并将参数赋值给委托变量

        public FrmOther(AddOneDelegate addone)
        {
            InitializeComponent();
            //【3】定义一个委托变量,并将实际执行的方法绑定在一起
            this.addOne = addone;
        }  

FrmMain窗体在加载的时候,新建一个从窗体FrmOther,并将UI展示的方法实例传给从窗体。

        public FrmMain()
        {
            InitializeComponent();
            FrmOther objFrm = new FrmOther(SetValueToUI);
            objFrm.Show();
        }

完整源代码

///-------------------------------------------------------------------------------------------------------
/// Project:使用委托实现窗体间简单通信
/// Description:主窗体:委托声明和定义委托实际执行的方法
/// Author:Mef
/// Source:Mef Studio
/// Date:2018-11-27
///-------------------------------------------------------------------------------------------------------

using System.Windows.Forms;

namespace PassingValueWindows
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
            FrmOther objFrm = new FrmOther(SetValueToUI);
            objFrm.Show();
        }

        
        /// <summary>
        /// 【2】定义一个实际委托调用的方法,结构和被调用的委托一致
        /// </summary>
        /// <param name="counter"></param>
        private void SetValueToUI(string counter)
        {
            lblCounter.Text = counter;
        }
    }

    /// <summary>
    /// 【1】声明委托
    /// </summary>
    /// <param name="counter"></param>
    public delegate void AddOneDelegate(string counter);
}
///-------------------------------------------------------------------------------------------------------
/// Project:使用委托实现窗体间简单通信
/// Description:从窗体:委托变量和实际方法的绑定、调用
/// Author:Mef
/// Source:Mef Studio
/// Date:2018-11-27
///-------------------------------------------------------------------------------------------------------

using System;
using System.Windows.Forms;

namespace PassingValueWindows
{
    public partial class FrmOther : Form
    {
        public FrmOther(AddOneDelegate addone)
        {
            InitializeComponent();
            //【3】定义一个委托变量,并将实际执行的方法绑定在一起
            this.addOne = addone;
        }

        /// <summary>
        /// 计数器
        /// </summary>
        private int counter = 0;

        /// <summary>
        /// 点我按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAddOne_Click(object sender, EventArgs e)
        {
            counter++;
            //【4】调用
            this.addOne.Invoke(counter.ToString());
        }

        /// <summary>
        /// 【3】定义一个委托变量
        /// </summary>
        private AddOneDelegate addOne;
    }
}

实现演示

为点击之前,

点击多次之后,

Over

每次记录一小步...点点滴滴人生路...

猜你喜欢

转载自blog.csdn.net/YouyoMei/article/details/84564233