日期:2014-05-17  浏览次数:21419 次

c#定时器无效了?
我发现我对按钮重绘的那段代码会影响我设置的定时器的作用,在butto_paint中的代码同时注释后才可以正常使用
我原来已经写好了窗体像QQ一样可以隐藏到桌面上方的功能,用timer进行检测位置,今天写了新的功能,内容也比较多,然后我发现timer的tick事件却莫名没用了,我检查enable是true(一开始设置好了的),检查它的所有引用,没有发现使它成为false的代码,从新写过这个功能,也出现一样的情况,至于我原来为一个按钮添加的背景图片也无法正常的加载,总是要在我拖动一下窗体才可以显现,经过我对备份的文件进行添加我后来写上的代码,我发现最后在添加了对按钮的重绘后就会出现上面的两个问题

------解决方案--------------------
问题出在
button2.BackgroundImage = mybmp;
button3.BackgroundImage = mybmp;
在重载OnPaint或者响应Paint消息的处理中不要使用会引起刷新界面操作,设置背景图片会引起界面刷新,界面刷新又会进入到Paint消息的处理里面,如此循环就是问题所在了。
个人建议:如果你响应需要重载OnPaint或者响应Paint消息来达到界面自定义的要求,那么最好这个控件的所有绘制都用绘图来完成而不是用控件的属性。另外,你这样响应Paint消息不是很好,最好封装一个Button类。
------解决方案--------------------
我使用你给的代码做的试验,问题就是我提到的那两句给背景图片赋值的语句上,去掉就没有问题了。
如果不改变你现在的重绘逻辑,我建议你在Form_Load中给按钮添加背景图片,其他不用变就可以解决问题了。
但是还是建议你封装Button类。
你的Timer做了什么操作?与界面相关吗?如果不相关就与你提的问题无关。