实现功能描述:
从窗体点击按钮,并记录点击次数,将点击的次数传递给主窗体展示。
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
每次记录一小步...点点滴滴人生路...