繁体   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