1 event作用:
event 是修饰符,限制委托变量用 = 符号。
委托变量用等于 = 会导致,之前的绑定全部作废。所以event修饰后只能 += 和 -= 处理委托变量。
学这个之前,要先学会 delegate 委托的使用方法:
1声明
2定义
3绑定
4调用
1声明:
namespace System
{
[Serializable]
[ComVisible(true)]
[__DynamicallyInvokable]
public delegate void EventHandler(object sender, EventArgs e);
}
全局变量区System ,跟窗体方法的参数签名相同。
2定义: Click
// Control
[SRCategory("CatAction")]
[SRDescription("ControlOnClickDescr")]
public event EventHandler Click
{
add
{
base.Events.AddHandler(EventClick, value);
}
remove
{
base.Events.RemoveHandler(EventClick, value);
}
}
Control 定义了方法 public event EventHandler Click
3绑定:
this.button2.Click += new System.EventHandler(this.button2_Click);
this.btn_开始.Click += new System.EventHandler(this.btn_开始钮click);
4调用:
窗体运行后,由 Application 控制
//=====================================================================
from继承后,有个 this.Controls (你就当它是父类对象)
this.Controls.Add(this.btn_开始);
控件在 System.Windows.Forms
容器是 Controls 登记时 this.Controls.Add(this.btn_开始);
平台是 Application
绘制在 System.Drawing
加载事件: this.btn_开始.Click += new System.EventHandler(this.btn_开始钮click);
1 new System.EventHandler是新建个无名的变量对象,它绑定 this.btn_开始钮click
2 this.btn_开始.Click += 无名的变量对象;
// 我们前面学过,变量的赋值
int Click;
int b;
Click = b; //同类型的变量才能赋值,只是b没有名字,再把 int 改成委托 EventHandler
namespace System
{
[Serializable]
[ComVisible(true)]
[__DynamicallyInvokable]
public delegate void EventHandler(object sender, EventArgs e);
}
按钮对象,它有个属性叫 Click 它的类型是 EventHandler
// 主窗体实际是 Form 派生出来的儿子
private void btn_开始钮click (object sender,EventArgs e )
{ //开始钮按下的业务逻辑
}
.Click本质是个委托。
foreach (Control item in this.Controls)
{
if (item is Button && item.Tag?.ToString() == "btn")
{
((Button)item).Click+= new System.EventHandler(this.btn_Click);
}
}
this.Controls 主容器
Control的只读属性
public ControlCollection Controls
.Click // 它是 EventHandler 类型 的变量( 它等待被人绑定 方法)
Control对象的方法
public event EventHandler Click
{
add
{
base.Events.AddHandler(EventClick, value);
}
remove
{
base.Events.RemoveHandler(EventClick, value);
}
}
EventHandler 是 委托类型
namespace System
{
[Serializable]
[ComVisible(true)]
[__DynamicallyInvokable]
public delegate void EventHandler(object sender, EventArgs e);
}
看下流程:
1 全局变量区 声明了 委托类型 EventHandler
namespace System
{
public delegate void EventHandler(object sender, EventArgs e);
}
2 Control 定义了方法 public event EventHandler Click
3 窗体继承了 .Click
4 等待后面的儿子赋值 Click
.Click+= new System.EventHandler(this.btn_Click);
private void btn_Click(object sender, EventArgs e)
{
btn_Click 的方法类型就是 EventHandler 的类型
public delegate void EventHandler( object sender , EventArgs e );// 全局变量区
public event EventHandler Click;// 定义变量 // 定义方法委托类型
object 是装箱拆箱,表示谁发起调用的。 e表示事件的类型,形参
event的作用是在委托的基础上,限制用= 来绑定方法。只能用 += 和 -= 来加载卸载方法。