C#委託學習:委託實現窗體之間簡單傳值
阿新 • • 發佈:2018-11-28
實現功能描述:
從窗體點選按鈕,並記錄點選次數,將點選的次數傳遞給主窗體展示。
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
每次記錄一小步...點點滴滴人生路...