Знайте, кто получил фокус в событии Lost Focus

Действительно ли возможно знать, кто получил фокус в потерянном событии фокуса?

Компактная Платформа не имеет ActiveControl, таким образом, я не знаю, как сказать, кто получил фокус.

9
задан Flexo 14 December 2013 в 08:40
поделиться

4 ответа

Это решение, которое в итоге сработало:

public System.Windows.Forms.Control FindFocusedControl()
{
    return FindFocusedControl(this);
}

public static System.Windows.Forms.Control FindFocusedControl(System.Windows.Forms.Control container)
{
    foreach (System.Windows.Forms.Control childControl in container.Controls)
    {
        if (childControl.Focused)
        {
            return childControl;
        }
    }

    foreach (System.Windows.Forms.Control childControl in container.Controls)
    {
        System.Windows.Forms.Control maybeFocusedControl = FindFocusedControl(childControl);
        if (maybeFocusedControl != null)
        {
            return maybeFocusedControl;
        }
    }

    return null; // Couldn't find any, darn!
}
6
ответ дан 3 November 2019 в 00:59
поделиться

Нет. сначала идет событие LostFocus одного элемента управления, затем событие GotFocus следующего элемента управления. пока вы не можете понять, какой элемент управления использует пользователь в следующий момент, это невозможно.
тогда как, если у компактного фреймворка есть свойство TabIndex, его можно предсказать, только если пользователь использует клавишу табуляции.

Изменить: ОК Вы опубликовали решение, и оно работает нормально, я должен признать: простое «Нет» неверно +1

1
ответ дан 3 November 2019 в 00:59
поделиться

Один из вариантов - взаимодействие с GetFocus API

[DllImport("coredll.dll, EntryPoint="GetFocus")]
public extern static IntPtr GetFocus();

. Это даст вам дескриптор окна, которое в настоящее время имеет фокус ввода. Затем вы можете рекурсивно перебирать дерево элементов управления, чтобы найти элемент управления с помощью эту ручку.

2
ответ дан 3 November 2019 в 00:59
поделиться

Использование corell.dll выглядит хорошей идеей.

Другой возможный способ - создать обработчики события GotFocus для всех элементов управления на вашей форме. Затем создайте переменную уровня класса, которая будет обновлять имя элемента управления, имеющего текущий фокус.

1
ответ дан 3 November 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: