С# потерял фокус без использования управляющего события

Есть ли способ получить, кто потерял фокус в форме С#, не используя событие LostFocus для каждого компонента?

[редактировать]

Мне нужна экранная клавиатура.

Мне нужно сохранить последнее сфокусированное управление для нажатия клавиши, но мне нужно сделать это для всех в окне.

Также основным проектом является wpf, чем у меня есть какой-то компонент, вложенный как itemsTemplate и так далее...


person Achilleterzo    schedule 26.05.2011    source источник
comment
Вы говорите о приложениях windows-forms?   -  person Akram Shahda    schedule 26.05.2011
comment
Да, извините... не аспид, а паутина   -  person Achilleterzo    schedule 26.05.2011


Ответы (2)


Я, наконец, использовал это:

    foreach (Control uie in FindInLogicalTreeDown(this, typeof(TextBox))) AssignEvents(uie);

    private static IEnumerable<DependencyObject> FindInLogicalTreeDown(DependencyObject obj, Type type)
    {
        if (obj != null)
        {
            if (obj.GetType() == type) { yield return obj; }
            foreach (object child in LogicalTreeHelper.GetChildren(obj)) 
                if (typeof(DependencyObject).IsAssignableFrom(child.GetType()))
                    foreach (var nobj in FindInLogicalTreeDown((DependencyObject)child, type)) yield return nobj;
        }
        yield break;
    }

    void AssignEvents(Control element)
    {
        element.GotMouseCapture += new MouseEventHandler(Component_GotFocus);
    }

    public Control LastFocus { get; set; }
    public void Component_GotFocus(object sender, RoutedEventArgs e)
    {
        LastFocus = (Control)sender;
        if (LastFocus.GetType() == typeof(TextBox)) { KeyboardVisible = true; }
    }
person Achilleterzo    schedule 06.07.2011

я не думаю, что есть какой-либо способ, пока вы не подпишетесь на события и не отследите, какое событие с потерей фокуса сработало последним

person Deepesh    schedule 26.05.2011