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