using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.ProgressBar;
namespace DelegateTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//this.Load += new EventHandler(Form1_Load_1);
}
int i = 1;
private void Form1_Load_1(object sender, EventArgs e)//这里是事件,事件是一个特殊的委托类型。(委托是一种特殊的类)
//sender是事件源,表示触发事件的那个类(组件),比如说你按下按钮,那么sender就是按钮。
//EventArgs类是是事件参数,继承自System.EventArgs的一个自定义的类,事件发生时需要传递的一些信息。包含点击的位置等等,它用来辅助你处理事件。
{
changeEvent += Form1_changeEvent;
}
public void Form1_changeEvent(string Val)
{
this.Invoke(new Action(() => { this.textBox1.AppendText("当前lable的值为" + Val + "\r\n"); }));//用Lamda表达式代替方法
}
public void button1_Click(object sender, EventArgs e)
{
Temp = i.ToString();
i++;
label1.Text = "你一共点了我" + Temp + "次";
}
public delegate void ChangeDelegate(string value); //实时监控某一属性的值,当值发生变化时触发事件,
//其核心就是借助属性的Set方法,来判断当前set的值是否与原来的值相等,如果相等直接赋值,如果不相等,说明值变了,根据自己调用的方法,声明委托,事件,触发方法
public event ChangeDelegate changeEvent;//event事件,名为changeEvent
public string _temp;
public string Temp
{
get { return _temp; }
set
{
if (_temp != value)
{
changeEvent(value);
}
_temp = value;
}
}
}
}