那么i=cbo.ListIndex(),如果选择了第30项
sin(i),还是能算,因为和之前仍然等效!
举一个同学遇到的问题的例子:
同学想做一个类似闹钟的程序,从下拉列表中选择一种声音,到时间就能自动播放声音。
遇到问题——
问:这样好像选不上音效,到点了没有声音播放
答:
这里设置断点,中断后,检查几个划线变量的值
另外检查PlaySound函数的返回值,例如:
int r=(int)PlaySound(...)
然后你看r为几?
问:
答:
这看不出来cboRing.ListIndex()是几
定义个变量,int i=cboRing.ListIndex(); 中断后看i的值
或者 form1.TextSet(cboRing.ListIndex()); 还是MsgBox(cboRing.ListIndex())显示出来
还有,你先在main函数写:PlaySound(IDR_DingDong,...);任意播放一个声音,检查有问题吗
先排除是声音的问题,然后再加上cboRing的控制
问:r是
答:MSDN说:
那就是只要非0,就是成功
问:声音是可以的,我之前试过
答:
在main函数里,写一句,可以成功吗?
如果可以,直接把这句贴过去,贴到Timer1_Timer中
先不加任何cbo控制,也就是到时间,固定响此声音
这个调通了,再加cbo的选择一项的控制
问:
不是...r是0了
答:现在r是0,是失败的
问:这个cboRing的listindex是不对的
答:你那个语句太复杂,功能太强大
我还是建议你直接在main函数里写一句:PlaySound(IDR_DingDong,...);播放固定声音,调通了,再一点一点加功能
你省略了很多变量,都写到一条语句,是好的,也简洁
但是不容易调试
刚才和你说,你先写:int i=cboRing.ListIndex(); 中断后看i的值
一步一步来
最后再写你那个合并为一条语句,再删除中间变量
问:我是从这样改过来的,直接写IDR_DingDong的时候都是可以的
开始加cbo之后就出了点问题
答:你既然调通了第一步,既然直接写IDR_DingDong的时候都是可以的
那么就每一步都和之前等效,一步一步来
先多用变量,调通了,再合成一句,再省略中间变量
int i=cboRing.ListIndex();
如果这样i不对,看一看resouce.h,是不是控件ID有问题
没有重复的,而且尽量别用1001开始的几个数
每一步都和之前等效,如果发现“为何之前行这一步不行?”
那就是这一步和之前不等效!认为等效是错了。那么检查为何不等效?就容易发现问题。例如:控件ID有问题
问:我找到问题了,就是这个ListIndex不太对
好的我再看看
答:那就单独调ListIndex
先别Timer了。你就临时加个按钮,单击此按钮,显示其ListIndex,例如显示到窗体标题栏
然后运行,测试,列表中选择一项,就单击此按钮……其ListIndex正确吗?
把这个调通,再加到Timer里
了解旬月轻松考过甚至轻松考优秀的正确方法,后台(不是文末留言)回复:学习方法
选择题
联系客服