Нужно сделать сабж в рамках Application. AddMessageFilter не помогает — WM_SETFOCUS и WM_KILLFOCUS туда не приходят.
internal class FocusChangingEventArgs : EventArgs
{
public Control Control { get; set; }
}
internal class FocusChangingCapturer : IMessageFilter
{
#region Events
public event EventHandler<FocusChangingEventArgs> GotFocus;
public event EventHandler<FocusChangingEventArgs> LostFocus;
#endregion
#region IMessageFilter Members
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == Msg.WM_SETFOCUS)
{
Control c = Control.FromHandle(m.HWnd);
if (c != null && GotFocus != null)
{
GotFocus(this, new FocusChangingEventArgs() { Control = c });
}
}
else if (m.Msg == Msg.WM_KILLFOCUS)
{
Control c = Control.FromHandle(m.HWnd);
if (c != null && LostFocus != null)
{
LostFocus(this, new FocusChangingEventArgs() { Control = c });
}
}
return false;
}
#endregion
}
Куда копать?