C#中利用事件来传递数据(EventArgs)

前言

前文介绍在GUI编程中的事件,其中说到EventHandler委托类型在声明时,必须有两个参数变量,第一个是object类型,第二个是EventArgs类型。

对于EventArgs类型,有2个作用。当不需要使用事件传递参数时,此变量传递null即可;当需要使用事件传递参数时,该类型当作基类使用,可传递其的子类(存储数据),用于传递数据。

在事件中利用EventArgs传递数据

那么我们修改之前的例子,阿辉继续订阅报社的报纸,当报社发报后,阿辉可第一时间进行阅读。修改后变为报社发报的文章里面包含阿辉名称,阿辉可以直接接收这个名称数据。

修改步骤

  • 声明一个派生自EventArgs的自定义类,可保存需要传递的数据。

  • 声明委托时,使用泛型来声明,泛型的类型为EventArgs的派生类。

这里需要注意的是订阅者中执行事件处理程序的的委托参数也必须修改为派生类

派生的自定义类

    /// <summary>
    /// 派生自EventArgs的类,用于传递数据
    /// </summary>
    class PaperContentEventArgs:EventArgs
    {
        public string Name { get; set; }                    //用于存储数据,当事件被调用时,可利用其进行传递数据。
    }

报社 发布者

    /// <summary>
    /// 报社
    /// </summary>
    class NewspaperOffice 
    {
        //1、创建事件并发布
        public event EventHandler<PaperContentEventArgs> StartPublishPaper;    

        public void Publish()
        {            
            Console.WriteLine("已发布报纸!报社传递数据:阿辉");
            PaperContentEventArgs paperContent = new PaperContentEventArgs();
            paperContent.Name = "阿辉";
            
            //2、触发事件,通知订阅者收报纸进行阅读
            StartPublishPaper(this, paperContent);                                            
        }
    }

阿辉 订阅者

    /// <summary>
    /// 阿辉 订阅者
    /// </summary>
    class AhuiPeople 
    {
        public AhuiPeople(NewspaperOffice npo)
        {
            npo.StartPublishPaper += SubscriptinPaper;                    //3、订阅事件
        }

        void SubscriptinPaper(object sender, PaperContentEventArgs e)
        {            
            Console.WriteLine("阿辉接收到报纸,开始阅读!收到的传递数据为:"+e.Name);
        }
    }

输出

寄语

人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。

原创不易,给个关注。

我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发 谢谢。

  • 13
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
您可以使用List控件来显示数据库的数据信息。以下是一个使用C#和List控件的示例代码: ```csharp using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Windows.Forms; namespace ListExample { public partial class MainForm : Form { private string connectionString = "YourConnectionString"; // 替换为您的数据库连接字符串 public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { LoadData(); } private void LoadData() { // 创建连接对象 using (SqlConnection connection = new SqlConnection(connectionString)) { // 创建查询语句 string query = "SELECT * FROM YourTableName"; // 替换为您的表名 // 打开数据库连接 connection.Open(); // 创建Command对象 SqlCommand command = new SqlCommand(query, connection); // 执行查询并获取DataReader对象 SqlDataReader reader = command.ExecuteReader(); // 创建一个List来存储数据 List<string> dataList = new List<string>(); // 读取数据并添加到List while (reader.Read()) { string data = reader["ColumnName"].ToString(); // 替换为您的列名 dataList.Add(data); } // 关闭DataReader reader.Close(); // 将List绑定到List控件 listBox.DataSource = dataList; } } } } ``` 以上代码,您需要将`YourConnectionString`替换为实际的数据库连接字符串,将`YourTableName`替换为实际的表名,将`ColumnName`替换为实际的列名。然后在窗体加载事件调用`LoadData`方法即可将数据加载到List控件
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andy阿辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值