私はこの回答を以前に投稿しましたが、2つのアップフォートを受信しましたが、その後私は自分の考えを変えて削除し、さらにトラブルシューティングを行いました。
まず、duration
はグローバル変数ではありません。それはあなたのクラスのメンバーです。
duration
は、PlayMusic()
に渡されたときに、なぜゼロであるのかわかりません。私はそれを調べましたが、そのようなことが起こる理由はないようです。 panel1_MouseDown()
は0に設定され、すぐ後にpanel1_Click()
はPlayMusic()
に渡されましたが、それは正しくありません。と一緒にClick()
が発生するので、そのときはduration
はゼロであってはいけません。
しかし、あなたのアプローチが完全に間違っているので、とにかくそれを変更しなければならないため、問題はありません。そのプロセスで問題が解決する可能性があります。
あなたはMouseDown()
直後にPlayMusic()
を起動する必要があるので、あなたは、ピッチと持続時間とのPlayMusic()
を呼び出すことができることはありませんが、その時あなたは期間がまだあることを行っているのか分かりません。
また、タイマーを使用して期間を把握することはまったく必要なく、本質的に不正確です。期間を知る必要がある場合は、MouseDown()
に現在の時刻を記録し、現時点の時刻をMouseUp()
から引きます。しかし、あなたはそれをする必要もありません。 MouseUp()
で音を止めるだけです。後でサウンドを再生できるようにするためには、後でサウンドを再生できるようにする必要があります)。
また、新しいMouseDownイベントハンドラとMouseUpイベントハンドラを追加することを真剣に再考することをお勧めしますOnClickイベントを受け取るたびにパネルに表示されます。
特に、他の人にコードを公開しているときに、何が間違っているのかを理解するために、意味のある変数名を使用することをお勧めします。あなたのpanel1_OnClickハンドラは、名前が示唆するように、panel1のクリックイベントを処理しませんが、あなたのすべての音楽キーボタンのクリックイベントを処理します。
なぜタイマーを使用して経過時間を計算していますか? – Oded
あまりにも多くのコード。問題に関連する部分まで切り捨てる必要があります。 –
これは確かに非常に変です。 mn.PlayMusic(ピット、デュレーション)にブレークポイントを置いてみましたか?そのことをデバッグしますか?どこにdurが0になるのか調べてみてください – Svarog