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;
}
我正在创建一个包含多个字段的表单:文本框、复选框、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;
}