C# 中不同类型的多个控件的通用事件处理程序

Common event handler for multiple controls of different types in C#

我正在创建一个包含多个字段的表单:文本框、复选框、DropBoxes Numeric UpDowns。

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

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

现在,每个控件都有一个事件(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;
}

等等...

当用户单击“保存”时,我将解析此数组并使用新值向数据库发送命令。

我意识到这是一个糟糕的实现。一个通用的事件处理程序会容易得多。我看到 this 答案,发现它适合我的问题。但是我怎样才能从 sender?

访问 BackColor 等属性

我需要一种方法将不同控件类型的多个事件处理程序合并为一个,并在该事件处理程序中访问控件的属性。

我正在使用 C# .NetFramework 4.0

如果在控件的Tag中加入索引名,那么也可以设置bChangedValues

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