我早些时候发布了这个答案,它收到了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