2012-06-10 3 views
0
private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
     { 
      if (click_counter > 0) 
       { 
        click_counter = 0; 
        return; 
       }     
      if (e.KeyCode == Keys.S) 
       { 

        searchButton.PerformClick(); 
       } 
     } 

Я добавил этот код в свой исходный код формы, который имеет объект webbrowser. Проблема в том, что ящик сообщений появляется 3 раза, когда я нажимаю букву «S».webBrowser1_PreviewKeyDown запускается несколько раз, когда я нажимаю клавишу

Как я могу избавиться от этой проблемы?

Thanks EDITED: удалено MessageBox.Show за рекомендацию!

SOLVED: Я решил это с помощью обходного пути. Однако я не могу назвать это реальным решением. то, что я сделал, это добавить условие if в начале, чтобы контролировать количество кликов. Любое лучшее решение приветствуется!

+1

Вы тоже пытались использовать KeyDown в качестве поддержки? Изучив [MSDN] (http://msdn.microsoft.com/it-it/library/system.windows.forms.control.previewkeydown.aspx), я нашел это: 'PreviewKeyDown - это то, где вы просматриваете ключ. Не вводите здесь никакой логики, вместо этого используйте событие KeyDown после установки IsInputKey в true. ' –

+0

Я этого не пробовал. Не могли бы вы написать пример кода? –

ответ

2

Do не использовать MessageBox в обработчиках событий, он накачивает контур сообщения, который может сильно нарушить нормальный поток событий. Особенно тот вид, который возникает из-за уведомлений Windows и доставлен диспетчером цикла сообщений, например PreviewKeyDown.

Используйте Debug.Print() для отображения диагностики в окне вывода. И, конечно же, не забывайте о контрольных точках отладчика.

+0

Это не отвечает на мой вопрос, но спасибо за совет. Я не буду использовать его. Это просто для тестирования. Но проблема в том, что когда я нажимаю букву S, она вызывается несколько раз, хотя она нажата только 1 раз. –

+0

@Val Nolav: Он не работает, если он находится в тестовом или производственном сценариях, просто не используйте его! – CodeZombie

+0

Это не совет, это * ответ *, который объясняет, почему событие не работает должным образом. Если у вас возникли проблемы после удаления вызова MessageBox.Show(), вам необходимо документировать следующую попытку лучше. –

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