如何找到引发事件的控件

时间:2014-07-09 16:59:54

标签: c# winforms

我的主表单上有很多自定义控件,它们利用事件来表示他们已经完成了处理。他们都分享同样的事件(约100个控件左右)。

主窗体消耗此事件,但我不知道如何找到一种有效的方法来获取引发事件而没有真正低效的代码。

我的控件包含在名为List<T>的{​​{1}}中,并托管在他们自己的项目中。

我的活动如下:

controlList

如果我想使用较少的控件,我会使它们不可见并禁用,因此public void OnTaskComplete(object sender, custom_control_project.TaskCompleteEventArgs e) { foreach (var control in controlList) { if (control.Visible) // <--- THIS IS WRONG! WHAT COULD THIS BE??? { try { ...// LOTS OF PROCESSING! } catch { ... } finally { ... } } } }

我怎样才能这样做,所以我只对引发事件的一个控件进行工作而不必处理那么多不必要的迭代?

2 个答案:

答案 0 :(得分:8)

sender参数是引发事件的对象。您可以将其强制转换为控件。

答案 1 :(得分:1)

假设所有控件都连接到同一事件(您指明):

protected void Button1_Click(object sender, EventArgs e)
{
    ((Button)sender).Visible = true;

    // or more generally:
    ((WebControl)sender).Visible = true;
}

您需要将sender转换为常用的基本类型。如果您使用基本类型,WebControl将允许您访问Enabled属性,而Control则不会。{/ p>