Удаление элемента управления, который имеет фокус, одним нажатием кнопки - PullRequest
1 голос
/ 29 июля 2011

У меня есть несколько элементов управления на панели, и я хочу сделать кнопку, которая удаляет ту, которая была в фокусе во время нажатия кнопки. Я попытался перебрать элементы управления на панели, чтобы проверить, имеет ли какой-либо из них фокус, но он всегда оценивается как ложный. Я подозреваю, что это потому, что кнопка получает фокус, как только она нажата. Если это то, что происходит, может кто-нибудь сказать мне, как я могу отслеживать последний элемент управления в панели, чтобы иметь фокус. Может быть, событие каждый раз, когда фокус меняется? И если это не то, что происходит, может кто-нибудь сказать мне, что, по его мнению, происходит. Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 29 июля 2011

Вы правы - как только кнопка будет нажата, все остальные элементы управления потеряют фокус.

Вы можете обойти это, прослушивая событие GotFocus , чтобы запомнить, какое из них было выбрано последним. Например:

public partial class YourForm
{
    private Control _LastFocusedControl;

    public YourForm()
    {
        InitializeComponent();

        var controlsToWatchForFocusChange = ...;   // Some IEnumerable<Control>, e.g. `new[] { txtTextBox1, txtTextBox2 }`
        foreach (var control in controlsToWatchForFocusChange) {
            control.GotFocus += (sender, e) => _LastFocusedControl = (Control)sender;
        }
    }
}

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

0 голосов
/ 29 июля 2011

Вы можете использовать события GotFocus и LostFocus , чтобы отслеживать, какой элемент управления был сфокусирован до нажатия кнопки.

0 голосов
/ 29 июля 2011

Да, кнопка имеет фокус, так как она была нажата.

...