C# 自定义 事件 和 触发自定义事件,显示子窗体传过来的值
在C#编程中,事件是对象之间通信的一种方式,它允许一个对象通知其他对象当某个特定事情发生时。自定义事件则是对系统内置事件的扩展,让我们能够根据具体需求创建和处理自己的事件。本篇文章将深入探讨如何在C#中自定义事件以及如何触发这些事件,同时展示如何在窗体之间传递数据,特别是从子窗体到父窗体。 理解事件的基本概念。在C#中,事件是基于委托(Delegate)的,它们定义了一个或多个方法的集合,这些方法将在事件发生时被调用。事件通常包含两个主要部分:事件声明(event declaration)和事件处理程序(event handler)。事件声明定义了事件,而事件处理程序是响应事件的方法。 1. **自定义事件声明**: 在类中,我们可以通过声明一个事件字段来定义自定义事件。这通常涉及到使用`event`关键字,后面跟着一个委托类型。例如: ```csharp public event EventHandler MyCustomEvent; ``` 这里,`EventHandler`是内置的事件处理器委托,它接受两个参数:`object`类型的`sender`(发送事件的对象)和`EventArgs`类型的`e`(事件参数)。 2. **自定义事件触发**: 当需要触发事件时,我们调用事件字段的`raise`方法,通常以`On`开头,如`OnMyCustomEvent`。这个方法会调用所有已附加的事件处理程序。如果需要自定义事件参数,我们可以创建一个继承自`EventArgs`的类,然后在`On`方法中使用这个自定义参数类。 ```csharp protected virtual void OnMyCustomEvent(MyCustomEventArgs e) { MyCustomEvent?.Invoke(this, e); } ``` 3. **子窗体与父窗体间的通信**: 在窗体之间传递数据,通常是在一个窗体打开另一个窗体后,通过事件来传递信息。例如,子窗体可能有一个按钮,当点击该按钮时,会触发一个事件,将值传递回父窗体。 ```csharp // 子窗体类 public class ChildForm : Form { public delegate void ValuePassedEventHandler(object sender, ValuePassedEventArgs e); public event ValuePassedEventHandler ValuePassed; private void button1_Click(object sender, EventArgs e) { // 创建自定义事件参数 ValuePassedEventArgs args = new ValuePassedEventArgs("传递的数据"); // 触发事件 ValuePassed?.Invoke(this, args); } } // 父窗体类 public class MainForm : Form { private void ShowChildForm() { ChildForm childForm = new ChildForm(); childForm.ValuePassed += ChildForm_ValueChanged; childForm.ShowDialog(); } private void ChildForm_ValueChanged(object sender, ValuePassedEventArgs e) { // 接收并处理子窗体传递的数据 MessageBox.Show("从子窗体接收到的值:" + e.Value); } } ``` 4. **事件参数**: `EventArgs`类是所有事件参数的基类,通常我们会根据需要创建自定义的事件参数类,包含我们需要传递的具体信息。例如: ```csharp public class ValuePassedEventArgs : EventArgs { public string Value { get; set; } public ValuePassedEventArgs(string value) { Value = value; } } ``` 5. **注意事项**: - 为了遵循封装原则,不要在外部直接访问事件字段,而是提供公共的`add`和`remove`访问器。 - 事件处理程序应尽量避免在非UI线程中执行,因为它们可能访问UI元素,这可能导致线程同步问题。 - 如果在派生类中重写事件处理,记得调用基类的`On`方法,以避免断开已附加的事件处理程序。 C#中的自定义事件和窗体间通信是构建复杂用户界面的关键部分。通过理解和应用这些概念,开发者可以创建更灵活、更可扩展的Windows Forms应用程序。在实际项目中,WindowsFormsApplication1示例代码可能包含了具体的实现细节,你可以通过查看和运行此项目进一步学习和理解这些概念。
- 1
- 粉丝: 14
- 资源: 104
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于ESP32和AWS IoT Core的室内温湿度监测系统.zip
- (源码)基于Arduino的I2C协议交通灯模拟系统.zip
- coco.names 文件
- (源码)基于Spring Boot和Vue的房屋租赁管理系统.zip
- (源码)基于Android的饭店点菜系统.zip
- (源码)基于Android平台的权限管理系统.zip
- (源码)基于CC++和wxWidgets框架的LEGO模型火车控制系统.zip
- (源码)基于C语言的操作系统实验项目.zip
- (源码)基于C++的分布式设备配置文件管理系统.zip
- (源码)基于ESP8266和Arduino的HomeMatic水表读数系统.zip
- 1
- 2
前往页