Вы можете добавить такой класс в ваш проект:
public class FocusWatcher
{
private static System.Windows.Forms.Control _focusedControl;
public static System.Windows.Forms.Control FocusedControl
{
get
{
return _focusedControl;
}
}
public static void GotFocus(object sender, EventArgs e)
{
_focusedControl = (System.Windows.Forms.Control)sender;
}
}
Затем для любого элемента управления в любой форме, в котором вы хотите быть кандидатом на «последний элемент управления», вы должны сделать следующее:
textBox1.GotFocus += FocusWatcher.GotFocus;
, а затем доступ к FocusWatcher.FocusedControl
, чтобы получить последний элемент управления. Мониторинг сообщений будет работать, но вы должны игнорировать нежелательные сообщения (например, WM_ACTIVATE из формы Mdi).
Вы можете перебрать все элементы управления в каждой форме и добавить этот обработчик для события GotFocus, но, несомненно, есть элементы управления, для которых вы не хотите этого (например, кнопки). Вместо этого вы можете выполнить итерацию и добавить обработчик только для TextBoxes.