我早些時候發佈了這個答案,它收到了2個upvotes,但後來我改變了主意,刪除了它,做了一些更多的疑難解答,所以現在我要重新發布它。
首先,duration
不是全局變量;它是你班上的一員。
現在,我真的不知道爲什麼duration
爲零時,它傳遞給PlayMusic()
。我仔細研究了它,似乎沒有理由發生這樣的事情。我認爲panel1_MouseDown()
將其設置爲零,並且之後立即將panel1_Click()
傳遞給PlayMusic()
,但這不正確:Click()
與MouseUp()
一起發生,因此duration
在當時不應該爲零。
但這並不重要,因爲你的方法是完全錯誤的,所以你將不得不改變它,這個問題可能會在這個過程中自行修復。
你將永遠無法調用PlayMusic()
俯仰和持續時間,因爲你需要立即調用PlayMusic()
在MouseDown()
,但在那個時候,你不知道什麼時間會是呢。
此外,使用計時器來計算持續時間是完全不必要的,並且本質上不準確;如果您確實需要知道持續時間,只需在MouseDown()
上記錄當前時間,然後從MouseUp()
的當前時間中減去該時間。但是你也不需要那樣做。您只需停止播放MouseUp()
上的聲音即可。 (如果你願意的話,你只需要這樣做就可以重放聲音。)
另外,我建議你認真重新考慮將新的MouseDown和MouseUp事件處理程序添加到每次您收到OnClick事件時都會收到面板。
另外,我建議你使用有意義的變量名,特別是當你向別人展示你的代碼時,要求他們弄清楚它有什麼問題。您的panel1_OnClick處理程序不會處理panel1的點擊事件,因爲它的名稱會顯示,但它會處理所有音樂按鍵的點擊事件。
爲什麼使用計時器計算經過時間? – Oded 2011-12-26 10:34:21
代碼太多了。您應該將其修剪至與問題相關的部分。 – 2011-12-26 10:34:30
這確實很奇怪。你有沒有嘗試在mn.PlayMusic(坑,持續時間)放置一個斷點;並調試的東西?嘗試找到在哪一點DUR變爲0 – Svarog 2011-12-26 10:35:02