2014-07-09 25 views
0

我的主窗體上有很多自定義控件,它們利用事件來表示它們已完成處理。他們都分享這個相同的事件(約100控件左右)。如何找到引發事件的控件

主窗體消耗這個事件,但我沒有線索如何找到一個有效的方式來找到沒有真正低效的代碼引發事件的方法。

我的控件包含在名爲controlListList<T>中,並託管在他們自己的項目中。

我的事件看起來像這樣:

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 
       { 
        ... 
       } 
      } 
     }   
    } 

如果我想用更少的管制,我讓他們看不到和殘疾人,因此control.Visible

我該如何做到這一點,所以我只對一個控件提出了事件而不必處理那麼多不需要的迭代?

回答

8

sender參數是引發事件的對象。您可以將其轉換爲控件。

+0

很簡單...感謝您的快速回復 – Shen

1

假設所有的控件都連接到同一事件(你指示):

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

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

您需要將sender轉換爲普通,基本類型。如果您使用基本類型,WebControl將允許您訪問Enabled屬性,而Control不會。

相關問題