[英]C# Global Variable
問題
大家好,我正在用C#開發鋼琴。 我已經成功地制造了鋼琴,而且演奏起來還不錯。 但是,我想使用兩個計時器:
一個計時器用於檢查鼠標左鍵被按下的時間(在Form.cs中),另一個計時器根據鼠標左鍵被按下的時間播放音樂(此計時器可在MusicNote.cs中找到) )。
第一次計時器可以正常工作,並且每次滴答都會增加持續時間。 問題是,當我嘗試將全局變量duration從Form1傳遞給MusicNote.PlayMusic時,duration值變為0,而不是在textBox2.Text中正確顯示的值。
嘗試將bNoteShape從Form1傳遞到MusicNote時,會發生相同的問題。
編輯
謝謝你們。 我已經解決了問題。
我在較早之前發布了此答案,但收到了2份贊成票,但是后來我改變了主意,刪除了它,做了更多的故障排除,所以現在我重新發布它。
首先, duration
不是全局變量; 它是您班上的一員。
現在,我真的不知道為什么將duration
傳遞到PlayMusic()
時為零。 我看着很難,而且似乎沒有理由對這樣的事情發生。 我以為panel1_MouseDown()
將其設置為零,然后panel1_Click()
將其傳遞給PlayMusic()
,但這是不正確的: Click()
與MouseUp()
一起出現,因此duration
在那時不應該為零。
但是沒關系,因為你的做法是完全錯誤的,所以你將不得不反正去改變它,問題可能會自我修正的過程。
您將永遠無法使用音高和持續時間來調用PlayMusic()
,因為您需要在MouseDown()
立即調用PlayMusic()
MouseDown()
,但是那時您還不知道持續時間是多少。
此外,使用一個計時器來計算的持續時間完全是不必要的,並且固有地不精確的; 如果您真的需要知道持續時間,只需在MouseDown()
上記錄當前時間,然后從MouseUp()
上的當前時間中減去它。 但是您也不需要這樣做。 您只需要停止在MouseUp()
上播放聲音即可。 (如果您願意的話,您只需要這樣做就可以稍后再播放聲音。)
另外,我建議您在每次收到OnClick事件時認真考慮重新向面板添加新的MouseDown和MouseUp事件處理程序的正確性。
另外,我建議您使用有意義的變量名,尤其是當您向他人展示代碼時,請他們找出問題出在哪里。 您panel1_OnClick處理不處理點擊事件PANEL1,因為它的名字所揭示的,而是它處理點擊所有的音樂按鍵事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.