C# 如何查找引发事件的控件

C# 如何查找引发事件的控件,c#,winforms,C#,Winforms,我的主窗体上有许多自定义控件,它们利用事件表示它们已完成处理。它们都共享同一事件(大约100个控件) 主窗体使用这个事件,但我不知道如何找到一种有效的方法,在没有真正低效的代码的情况下到达引发事件的窗体 我的控件包含在名为controlList的列表中,并托管在它们自己的项目中 我的活动看起来是这样的: public void OnTaskComplete(object sender, custom_control_project.TaskCompleteEventArgs e) {

我的主窗体上有许多自定义控件,它们利用事件表示它们已完成处理。它们都共享同一事件(大约100个控件)

主窗体使用这个事件,但我不知道如何找到一种有效的方法,在没有真正低效的代码的情况下到达引发事件的窗体

我的控件包含在名为
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
                {
                    ...
                }
            }
        }        
    }
public void OnTaskComplete(对象发送方,自定义控制项目.TaskCompleteEventArgs e)
{
foreach(控制器中的var控制)
{

如果(control.Visible)//发送方参数是引发事件的对象。您可以将其强制转换为控件。

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


您需要将
发送方
强制转换为常见的基本类型。如果使用基本类型,
网络控制
将允许您访问
启用的
属性,而
控制
将不允许。

非常简单……感谢您的快速响应
protected void Button1_Click(object sender, EventArgs e)
{
    ((Button)sender).Visible = true;

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