2016-12-08 5 views
0

Я довольно новичок в Visual C#, но долгое время кодировал в Delphi. Я создал форму, в которой есть простая панель, которая скрыта, если вы не набираете конкретный ключ на клавиатуре (у меня есть «KeyPreview», установленный для true для формы, и я использую событие KeyDown для обработки определения того, правильный ли ключ был нажат и сделать панель видимой/невидимой). Под панелью находится компонент webBrowser.Убедитесь, что форма C# имеет фокус, когда она должна быть

Что происходит следующим образом:

Когда моя форма первоначально начинается, у меня есть код для «Показанные» событие, что удостоверяется форма имеет фокус изначально:

private void Form1_Shown(object sender, EventArgs e) 
{ 
    if (!Focused) 
    { 
     Focus(); 
    } 
} 

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

Здесь все странно, и я не уверен, что делать. Есть две части, я имею дело с того, что это не так:

  1. Если я нажимаю на другую форму, а затем на строке заголовка моей формы еще раз, чтобы получить фокус на моей форме и попытаться нажатие клавиши, нажатие клавиши обнаружения не работает. Однако, если я нажму на другую форму, а затем вернусь к своей форме еще раз, обнаружение нажатия клавиши для формы будет работать. Что я могу сделать, чтобы убедиться, что это работает каждый раз, когда у меня есть фокус?

  2. Если я нажму на компонент веб-браузера в своей собственной форме, код KeyDown для формы больше не будет принят. Даже если я нажимаю на панель заголовка для формы, событие KeyDown не работает. Что мне нужно сделать, чтобы убедиться, что, если щелкнут компонент в моей форме, моя форма все равно ответит на событие KeyDown?

Заранее благодарим за любые советы.

+0

Можете ли вы показать код для своей панели надписей? –

+0

Вот и все. У меня нет кода для заголовка. У меня просто есть код для события KeyDown для самой формы. – Andre72127

ответ

0

Не могу сказать, почему ваш заголовок кажется перехватом ключевых событий. Возможно, что различные компоненты в форме могут иметь фокус и, таким образом, захватывать события клавиатуры. Я знаю, что управление веб-браузером работает таким образом. Вы можете рассмотреть возможность захвата событий клавиатуры по всему миру.

Я увидел что-то на Codeproject, которое показывает, как это сделать. Надеюсь, это поможет.

Они используют UserActivityHooks.

UserActivityHook actHook; 
void MainFormLoad(object sender, System.EventArgs e) 
{ 
    actHook= new UserActivityHook(); // crate an instance 

// hang on events 

    actHook.OnMouseActivity+=new MouseEventHandler(MouseMoved); 
    actHook.KeyDown+=new KeyEventHandler(MyKeyDown); 
    actHook.KeyPress+=new KeyPressEventHandler(MyKeyPress); 
    actHook.KeyUp+=new KeyEventHandler(MyKeyUp); 
} 

Что касается управления веб-браузером, то, конечно, он будет перехватывать события клавиатуры. Пользователям часто приходится вводить текст в формах, а разработчики часто кодируют javascript на веб-страницах, чтобы специально подключаться к событиям клавиатуры. Таким образом, элемент управления веб-браузером должен уметь их фиксировать.

Смежные вопросы