Первое нажатие клавиши теряется при замене оболочки Windows на приложение Windows Forms - PullRequest
4 голосов
/ 24 августа 2011

Я успешно заменил оболочку Windows, следуя подходу, указанному в этом ТАКОМ вопросе .

Однако я обнаружил, что первое нажатие клавиши потеряно и немного раздражает пользователя. Решение, которое мы попробовали, состоит в том, чтобы активировать форму в событии OnShown:

private void OnShownLoginForm(object z_sender, EventArgs z_e)
{
    Activate();
    m_loginTextBox.Focus();
}

Но это не решило проблему. Есть ли у вас какие-либо подсказки о том, что происходит?

Ответы [ 3 ]

0 голосов
/ 04 сентября 2011

Похоже, что-то вызвано, может быть, другой элемент управления сначала получает фокус.Есть ли в текстовом поле табордер, и вы можете установить его в 0?После этого следует сосредоточиться на ней после загрузки формы.

В противном случае попробуйте создать новую форму для тестирования, она действительно не будет воспроизводимой.

0 голосов
/ 29 октября 2013

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

У меня не было доступа к исходному коду, поэтому я пытался решить его с помощью javascript.
До первого щелчка мыши все нажатия клавиш, включая клавишу TAB, активировали событие нажатия клавиши, клавиша TAB не была обнаруженас помощью keydown / keyup при загрузке страницы.

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

вот пример кода:

function tabNext(e){
    if(e.keyCode == 9){
        // do work
    }
}

$('input').keypress(tabNext);
0 голосов
/ 29 августа 2011

Вы можете попробовать использовать System.Windows.Forms.SendKeys Class ( Документация MSDN ) для отправки события нажатия клавиши на форму в событии загрузки формы. Если это не помогает, попробуйте отправить события клавиатуры в событии Form.Shown, поскольку Form.Shown является последним событием в процессе запуска формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...