2011-12-11 33 views
1

是否有可能檢測控件是否已獲得用戶控件的焦點?我的意思不是我們在設計時添加到用戶控件中的某些控件,而是控制我們在表單上使用用戶控件後添加它們的控件。一個意思是面板的例子。我的用戶控件就像面板一樣,我想要檢測用戶控件上的包含(嵌套)控件何時獲得我關注的任何焦點。檢測用戶控件內部控件焦點

謝謝你們!

回答

1

我會這樣做的方式是當UserControl被創建並且您不處於設計模式時,循環遍歷用戶控件中的每個控件,將鉤子添加到它們的GotFocus事件並將鉤子指向UserControl(如ChildControlGotFocus)反過來引發用戶控件的主機可以使用的事件。

例如,下面是實現該功能的用戶控件樣品:

public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 

     if (!this.DesignMode) 
     { 
      RegisterControls(this.Controls); 
     } 

    } 
    public event EventHandler ChildControlGotFocus; 

    private void RegisterControls(ControlCollection cControls) 
    { 
     foreach (Control oControl in cControls) 
     { 
      oControl.GotFocus += new EventHandler(oControl_GotFocus); 
      if (oControl.HasChildren) 
      { 
       RegisterControls(oControl.Controls); 
      } 
     } 
    } 

    void oControl_GotFocus(object sender, EventArgs e) 
    { 
     if (ChildControlGotFocus != null) 
     { 
      ChildControlGotFocus(this, new EventArgs()); 
     } 
    } 
} 
+0

感謝。我非常感謝你所做的這件事。 – MahanGM