Сохраняя фокус на текстовом поле, пока я нажимаю на разные кнопки
В настоящее время я пытаюсь разработать пользовательскую клавиатуру для приложения WinCE. В настоящее время у меня есть форма с текстовым полем и кнопкой. Вопрос в том, как сохранить фокус на клавиатуре, когда я щелкаю мышью по SendInput (чтобы текстовое поле захватывало этот ввод). Один из способов - установить свойство "Фокусируемый", но я не могу установить его в форме Windows. Я надеюсь, что кто-то может помочь мне в этом. Спасибо!
3 ответа
Вы должны установить TextBox.Focus()
на кнопку нажмите обработчик событий. Я предполагаю, что кнопка имеет KeyPress
или же KeyDown
функция.
Более гибкой альтернативой будет хранение последнего сфокусированного элемента управления.
private Control lastFocusedControl;
И когда текстовое поле сфокусировано на нем, оно устанавливает значение, используя GotFocus
событие.
private void TextBox_GotFocus(object sender, EventArgs e)
{
lastFocusedControl = (Control)sender;
}
И тогда в обработчике событий вы можете просто сделать.
lastFocusedControl.Focus();
Если вы не боитесь перейти на "родную" сторону, вы можете рассмотреть возможность использования программной панели ввода (SIP). Он будет вести себя так, как вы описываете, и может использоваться любым приложением, работающим на устройстве. Эта документация предназначена для Compact 2013, но она также действительна для предыдущих выпусков (вы можете найти специфичные для выпусков версии в MSDN, но они довольно хорошо их спрятали): http://msdn.microsoft.com/en-us/library/ee500563.aspx
Хотя для VB.Net есть несколько хороших идей: http://msdn.microsoft.com/en-us/magazine/hh708756.aspx
Смотрите WS_EX_NOACTIVATE и
If (m.Msg = WM_MOUSEACTIVATE) Then
m.Result = MA_NOACTIVATE
Else
MyBase.WndProc(m)
End If
Теперь задача состоит в том, чтобы адаптировать это к вашей идее (отдельный процесс и форма? Или панель с кнопками?).
OTOS MS предоставляет специальный API-интерфейс клавиатуры SDK для написания пользовательских программных клавиатур для Windows Mobile (c/C++).