关于控件事件的一些简单介绍,可以参考链接:https://blog.csdn.net/qq_39157152/article/details/113242984
在程序开发中,遇到控件要关联类似的事件,重复输入关联是一件很繁琐的事情,所以可以使用事件统一关联的处理方式,符合面向对象编程的开闭原则。
开闭原则:程序拓展,封闭修改。
以下是原始的关联方式,比较繁琐,当程序有上千个控件需要关联时,界面和关联都会显得很臃肿。
//关联事件
//this.button1.Click += new System.EventHandler(this.btn_Click);
//this.button2.Click += new System.EventHandler(this.btn_Click);
//this.button3.Click += new System.EventHandler(this.btn_Click);
//this.button4.Click += new System.EventHandler(this.btn_Click);
//this.button5.Click += new System.EventHandler(this.btn_Click);
//this.button6.Click += new System.EventHandler(this.btn_Click);
//this.button7.Click += new System.EventHandler(this.btn_Click);
//this.button8.Click += new System.EventHandler(this.btn_Click);
使用遍历控件集合的方式,统一关联事件,在后续的开发中,如需添加新的控件,不许要修改代码,代码简洁,高效。在Tag后面加?是因为Tag没有数据的时候被用,可能会出现位将对象引用实例的异常,?在这里是判断Tag是否为空,为空则不执行后续代码。
//通过遍历的方式关联事件,以后程序开发中,若有拓展,封闭修改(对控件要统一关联事件)
foreach(Control item in this.Controls)
{
if(item is Button && item.Tag?.ToString() == "btn")
{
item.Click += new System.EventHandler(this.btn_Click);
}
}
关联的事件,sender是当前控件对象,由sender是object类型,所以需要转化成相应的类型
private void btn_Click(object sender, EventArgs e)
{
//sender参数是当前事件所在控件的对象
Button btn = (Button)sender;
MessageBox.Show(btn.Text);
}
关联事件Demo链接的https://download.csdn.net/download/qq_39157152/14939506