Самый быстрый способ получить сфокусированное управление в WinForms c #? - PullRequest
4 голосов
/ 29 ноября 2009

Я использую ProcessCmdKey в главном окне формы, чтобы приложение проверяло определенные ключи и выполняло специальную обработку пробелов, правого, левого и некоторых других типов. ProcessCmdKey в главной форме вызывается, даже если пользователь вводит текстовое поле внутри вложенного набора пользовательских элементов управления. Я не хочу обрабатывать клавишу пробела, когда они сфокусированы на элементе управления TextBox, так как они никогда не смогут набрать пробел. Как я могу проверить тип текущего окна в масштабе приложения?

Ответы [ 2 ]

6 голосов
/ 29 ноября 2009

Вы можете получить дескриптор окна с помощью:

  [DllImport("user32.dll")]
  private static extern IntPtr GetFocus();

Затем вы можете получить элемент управления .NET, связанный с этим дескриптором (если он есть), с помощью Control.FromHandle .

0 голосов
/ 29 ноября 2009

Нашел что-то, что, кажется, работает:

[DllImport("user32.dll")]
static extern IntPtr GetFocus();

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    IntPtr wndHandle = GetFocus();
    Control focusedControl = FromChildHandle(wndHandle);
    if(focusedControl is DevExpress.XtraEditors.TextBoxMaskBox)
    {
       return base.ProcessCmdKey(ref msg, keyData);
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...