-
事件的概念
- 事件是一种允许对象(在 WinForm 中通常是控件)通知其他对象(如包含该控件的表单或其他业务逻辑类)某个动作已经发生的机制。例如,当用户点击一个按钮时,按钮会 “触发” 一个点击事件,告知程序这个动作发生了,然后程序可以执行相应的代码来响应这个动作。
- 定义和使用委托
-
//定义委托类型 public delegate void MyDelegate(); class Program { static void Main() { //实例化委托类型 并绑定需要委托的方法 MyDelegate myDelegate = new MyDelegate(MyMethod); //执行委托 myDelegate(); } static void MyMethod() { Console.WriteLine("Method called through delegate."); } }
-
-
在 WinForm 中定义委托事件
-
步骤一:定义事件委托
- 事件委托是一种特殊的类型,它定义了事件处理方法的签名。在 C# 中,通常使用
EventHandler
或自定义委托类型。例如,如果要定义一个自定义的事件,其处理方法需要接收一个字符串参数,可以定义如下委托: -
//定义委托类型MyEventHandler public delegate void MyEventHandler(object sender, string message);
- 事件委托是一种特殊的类型,它定义了事件处理方法的签名。在 C# 中,通常使用
-
步骤二:在类中定义事件
- 在包含事件的类(通常是控件类或业务逻辑类)中,使用
event
关键字定义事件。例如: -
public class MyClass { //在MyClass类中声明一个MyEventHandler委托类型的委托事件 public event MyEventHandler MyEvent; }
- 在包含事件的类(通常是控件类或业务逻辑类)中,使用
-
-
在 WinForm 中使用事件
- 步骤一:订阅事件
- 在需要响应事件的类(如表单类)中,通过创建事件源对象(即触发事件的对象),并使用
+=
运算符订阅事件。例如,假设myObject
是MyClass
的一个实例,并且MyForm
类中有一个方法HandleMyEvent
用于处理MyEvent
事件,订阅事件的代码如下: -
public partial class MyForm : Form { //声明MyClass类型的对象myObject private MyClass myObject; public MyForm() { InitializeComponent(); //实例化MyClass类型对象myObject myObject = new MyClass(); //myObject中委托事件进行订阅其他方法 myObject.MyEvent += HandleMyEvent; } private void HandleMyEvent(object sender, string message) { MessageBox.Show(message); } }
- 在需要响应事件的类(如表单类)中,通过创建事件源对象(即触发事件的对象),并使用
- 步骤二:触发事件
- 在事件源类(
MyClass
)中,当满足一定条件(如某个方法执行完毕或某个属性值改变)时,通过调用事件(如果事件不为空)来触发它。例如: -
public class MyClass { public event MyEventHandler MyEvent; public void DoSomething() { // 一些操作 string message = "事件被触发"; //MyEvent(this,message) //如果MyEvent为null,那么整个表达式将不会执行Invoke方法,从而避免了因为尝试在空引用上调用方法而导致的异常。 //this.Invoke() 会阻塞调用线程,直到 UI 线程处理完委托为止。(同步更新) MyEvent?.Invoke(this, message); } }
- 在事件源类(
- 步骤一:订阅事件
- 在 WinForm 中,对于系统提供的控件(如按钮、文本框等),它们已经有预定义好的事件(如
Button
的Click
事件)。可以在设计视图中通过属性窗口中的 “事件” 选项卡,双击事件名称来自动生成事件处理方法的框架,然后在其中编写响应事件的代码。例如,对于按钮的Click
事件,当用户点击按钮时,就会执行对应的Click
事件处理方法。
委托事件定义和使用
于 2024-11-05 11:26:11 首次发布