2015-07-04 5 views
-1

имел проблему с тем, что мой KeyUp и событие KeyDown оба запускались дважды, когда я вызывал их. Наконец, найдено исправление для этого:KeyUp - запуск дважды

this.glControl1.KeyUp -= this.glControl1_KeyUp; 
    this.glControl1.KeyUp += new KeyEventHandler(this.glControl1_KeyUp); 

Это работает, но я действительно не могу понять, почему. Может ли кто-нибудь объяснить мне, пожалуйста.

Спасибо

+0

Это сильно зависит от того, откуда вызывается эти 2 строки кода. Вы должны будете предоставить больше контекста. – sstan

+3

Вероятно, вы несколько раз запускаете «KeyUp + = ...», что означает, что вы в конечном итоге подключаете один и тот же обработчик событий дважды, предварительно удалив его, чтобы вы только когда-либо выполняли обработчик события 'glControl1_KeyUp'. – James

ответ

1

Вы, вероятно, есть некоторые повторяющиеся события, которые вы используете в качестве триггера для подключения обработчика события, классическим примером является кнопкой мыши, например,

public void ButtonClick(object sender, EventArgs e) 
{ 
    this.SomeControl.KeyUp += this.SomeHandler; 
} 

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

Чтобы избежать этого, необходимо отцепить обработчик события, прежде чем передать его, поэтому выполнение следующей строки кода

this.SomeControl.KeyUp -= this.SomeHandler; 

Перед тем, как назначить обработчик события предотвращает повторяющиеся вызовы.

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

  • Нет связанных вопросов^_^