C # Foreach Заявление - PullRequest
       3

C # Foreach Заявление

2 голосов
/ 30 декабря 2011

Я занимаюсь разработкой фортепиано на 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 НЕ для каждого MusKey mk, а для каждого события MouseDown. Я не хочу, чтобы программа «запоминала», какая кнопка MusKey mk была нажата.

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

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

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

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

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

0 голосов
/ 30 декабря 2011

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

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

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

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