Cla*_*ton -1 c# parameters winforms piano
问题
大家好,我正在用C#开发一架钢琴.我成功地制作了钢琴并且演奏得很好.但是,我想使用两个定时器:
一个计时器,用于检查鼠标左键保持多少时间(在Form.cs中)和另一个计时器,根据鼠标左键保持多少时间播放音乐(此计时器可在MusicNote.cs中找到) ).
第一个计时器按预期工作,并且每次打勾都会增加持续时间.问题是,当我尝试将全局变量持续时间从Form1传递到MusicNote.PlayMusic时,持续时间值变为0,而不是textBox2.Text中正确显示的值.
尝试将bNoteShape从Form1传递到MusicNote时会出现同样的问题.
编辑
谢谢你们.我已经解决了这个问题.
我之前发布了这个答案,它收到了2个upvotes,但后来我改变主意,删除它,做了一些更多的故障排除,所以现在我重新发布它.
首先,duration不是全局变量; 它是你班上的一员.
现在,我真的不知道为什么duration在传递给它时为零PlayMusic().我很努力地看着它,似乎没有理由发生这样的事情.我认为panel1_MouseDown()将其设置为零,然后立即panel1_Click()将其传递给PlayMusic(),但这是不正确的:Click()与...一起发生MouseUp(),因此duration当时不应该为零.
但这没关系,因为你的方法是完全错误的,所以你无论如何都要改变它,问题可能会在这个过程中自行解决.
你将永远无法调整PlayMusic()音高和持续时间,因为你需要PlayMusic()立即调用MouseDown(),但那时你还不知道持续时间是多少.
此外,使用计时器来计算持续时间是完全没必要的,并且本质上是不准确的; 如果你真的需要知道持续时间,只需记录当前时间MouseDown()并从当前时间减去它MouseUp().但你也不需要这样做.你需要做的只是停止播放声音MouseUp().(如果您愿意,您只需要这样做就可以重播声音.)
此外,我建议您在每次收到OnClick事件时认真重新考虑将新的MouseDown和MouseUp事件处理程序添加到面板的正确性.
另外,我建议你使用有意义的变量名,特别是当你向其他人展示你的代码时,要求他们弄清楚它有什么问题.您的panel1_OnClick处理程序不会处理panel1的点击事件,因为它会提示,但它会处理所有音乐键按钮的点击事件.
| 归档时间: |
|
| 查看次数: |
627 次 |
| 最近记录: |