Перехват Set/KillFocus для всех контролов
От: Dmitry V. Romanovich Беларусь  
Дата: 09.10.08 09:23
Оценка:
Нужно сделать сабж в рамках 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
}


Куда копать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.