Способ, которым я бы подошел к этому, - это когда пользовательский элемент управления создается, а вы не находитесь в режиме разработки, циклически перебирая каждый из элементов управления в пользовательском элементе управления, добавляя перехваты к их событиям GotFocus и указывая перехват в методе UserControl. (скажем, ChildControlGotFocus), который, в свою очередь, вызывает событие, которое может использовать хост пользовательского элемента управления.
Например, вот пример UserControl, который реализует эту функциональность:
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());
}
}
}