2011-12-30 4 views
2

Я занимаюсь разработкой фортепиано на C#.C# Представление

У меня есть следующий фрагмент кода в моей программе:

private void panel1_MouseDown(object sender, MouseEventArgs e) 
{ 
    mn1 = new MusicNote(); 
    foreach (MusKey mk in this.panel2.Controls) 
    { 
     if (sender == mk) 
     { 
      //code 
      mk.MouseUp += new MouseEventHandler(this.panel1_MouseUp); 
     } 
    } 
} 

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

Моя проблема заключается в том, что если один и тот же музыкальный ключ (MusKey) нажат второй раз, событие mk.MouseUp выполняется дважды для этого нажатия одной клавиши. Аналогично, если один и тот же ключ нажат в пятый раз (не обязательно последовательно), событие mk.MouseUp выполняется пять раз для этого нажатия одной клавиши.

Что я хочу сделать, это выполнить цикл foreach NOT для каждого MusKey mk, но для каждого события MouseDown. Я не хочу, чтобы программа «помнила», который был нажат MusKey mk.

Как я могу это сделать?

ответ

3

Вы подключаете события каждый раз при нажатии мыши. Назначьте обработчики событий один раз в другом месте (например, событие Load).

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

Если вы делаете что-то более сложное, вам нужно будет оценить, был ли обработчик событий уже подключен к рассматриваемому событию.

+0

Спасибо очень очень очень очень много :) :):) Проблема решена благодаря вашей помощи :) – Clayton

+0

@ Clayton - не проблема, удачи в вашей фортепианной программе (пианист уже более 20 лет). –

+0

Спасибо большое :) Все самое лучшее для праздничного сезона :) – Clayton

0

Почему вы используете его в мероприятии MouseDown! добавить второй MouseEventHandler к MusKey, когда мышь вниз

вы должны сделать MouseEventHandler для всех ваших bottun в окне загрузки

я хочу эту помощь

+0

Спасибо вам очень очень много :) :) :) Проблема была решена благодаря вашей помощи :) – Clayton

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