簡體   English   中英

C#全局變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM