Я опубликовал этот ответ ранее, и он получил 2 отзыва, но затем я передумал, удалил его, сделал еще несколько действий по устранению неполадок, так что теперь я делаю репост.
Прежде всего, duration
не является глобальной переменной;это член вашего класса.
Теперь я действительно не знаю, почему duration
равно нулю, когда оно передается PlayMusic()
.Я внимательно посмотрел на это, и, похоже, нет причин для того, чтобы это происходило.Я думал, что panel1_MouseDown()
устанавливает его в ноль, и сразу после этого panel1_Click()
передает его в PlayMusic()
, но это не правильно: Click()
происходит вместе с MouseUp()
, поэтому duration
не должно было быть нулем прив этот раз.
Но это не имеет значения, потому что ваш подход совершенно неправильный, поэтому вам все равно придется его изменить, и проблема, вероятно, сама исправится.
Вы никогда не сможете вызвать PlayMusic()
с высотой и длительностью, потому что вам нужно вызвать PlayMusic()
сразу после MouseDown()
, но в то время вы еще не знаете, какой будет длительность.
Кроме того, использование таймера для определения продолжительности совершенно не нужно и, по сути, неточно;если вам действительно нужно знать продолжительность, просто запишите текущее время на MouseDown()
и вычтите его из текущего времени на MouseUp()
.Но вам и этого делать не нужно.Все, что вам нужно сделать, это просто остановить воспроизведение звука на MouseUp()
.(Вам нужно будет сделать это только для того, чтобы можно было воспроизвести звук позже, если вы того пожелаете.)
Кроме того, я бы посоветовал вам серьезно пересмотреть правильность добавления новых обработчиков событий MouseDown и MouseUp.на панель каждый раз, когда вы получаете событие OnClick.
Кроме того, я бы посоветовал вам использовать значимые имена переменных, особенно когда вы показываете свой код другим, прося их выяснить, что с ним не так.Ваш обработчик panel1_OnClick не обрабатывает события щелчка для panel1, как следует из его названия, но вместо этого он обрабатывает события щелчка для всех кнопок музыкальных клавиш.