c#中用于不同类型的多个控件的公共事件处理程序

本文关键字:控件 程序 事件处理 用于 同类型 | 更新日期: 2023-09-27 18:16:36

我正在创建一个具有多个字段的表单:文本框,复选框,下拉框数字上下框。

当表单加载时,我获取数据库并填充现有数据。

如果用户更改了任何字段,我必须将该信息发送到数据库。

现在,我对每个控制(3个checkedChanged, 4个TextChanged, 3个ValueChanged和2个SelectedIndexChanged)有一个事件。

我已经取了一个bool数组,其中我将变量设置为True并更改背景颜色。

bool[] bChangedValues = new bool[12];
private void tbName_TextChanged(object sender, EventArgs e)
{
     tbName.BackColor = CHANGED_COLOUR;
     // Set the flag to true to indicate value is changed
     bChangedValues [Name_Index] = true;
}
private void chIEnable_CheckedChanged(object sender, EventArgs e)
{
     chIEnable.BackColor = CHANGED_COLOUR;
     // Set the flag to true to indicate value is changed
     bChangedValues [IEnable_Index] = true;
}

等等…

当用户点击保存时,我将解析这个数组并发送命令到数据库,并使用新值。

我意识到这是一个糟糕的实现。使用公共事件处理程序会容易得多。我看到了这个答案,觉得它很适合我的问题。但是我怎么能从sender访问BackColor等属性呢?

我需要一种方法俱乐部在一个不同的控制类型的多个事件处理程序,也访问该事件处理程序中的控件的属性。

我使用的是c# .NetFramework 4.0

c#中用于不同类型的多个控件的公共事件处理程序

如果您将索引的名称添加到控件的Tag,那么您也可以设置bChangedValues

private void Control_ValueChanged(object sender, EventArgs e)
{
    var control = (Control)sender;
    control.BackColor = CHANGED_COLOUR;
    bChangedValues[control.Tag] = true;
}