窗口缩小不引发paint事件 我在picturebox_paint事件中有一些绘图指令,picturebox的anchor绑定窗体的四条边,如果我放大窗体,就会引发paint事件,但是我缩小却不行,请问我想放大或缩小都要引发paint的话,该怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在缩小事件里调用pricturebox的Control.Invalidate 缩小事件? 只有resize啊,我不是要最小化,只是改小窗体尺寸 在picturebox的Resize事件调用picturebox_paint就行啊 在窗体的SizeChanged事件中重新调用一下 SizeChanged或是Resize里再调用,那放大窗体时,绘制语句就被触发两遍了,效果就差了 缩小当然不会引发PAINT事件。因为缩小的时候窗体只要丢弃像素就可以了,没有必要重绘。如果一定想收到paint消息,那么可以捕获SizeChanged事件,手动使窗体无效来解决 如果我在picturebox_paint和sizechanged中都加入相同的绘图语句,那缩小的时候只触发一次,但放大的时候会触发两次,如何避免? SizeChanged事件中放入一句代码试试private void pictureBox1_SizeChanged(object sender, EventArgs e) { this.pictureBox1.Refresh(); } sizechanged中不要加绘制代码,直接加一句this.pictureBox1.Refresh(); 有很多种方法1.this.pictureBox1.Refresh();是窗体无效,并且重绘所有的子控件2.this.pictureBox1.Invalidate();可以传一个矩形和bool参数,决定使多少空间重绘和是否重绘子控件 我试了Refresh和Invalidate,的确都只画一次了,但是拖的时候闪烁严重,我是用BufferedGraphics的双缓冲来防止闪烁,不用refresh的时候效果是非常好的.我猜可能是Refresh把BufferedGraphics的双缓冲作用给抵消了,晕.....请教walkingmu,还有其它方法吗? 看来是跟不上刷新的节奏。你少发几个。设置一个bool bRefresh变量.if(!bRefresh) bRefresh=true;else{ bRefresh=false; this.pictureBox1.Refresh();}这样应该就可以减少一半的闪烁。比较好的做法应该是用线程控制。sizechanged事件中判断线程是否启动,如果已经启动了就不启动线程中用Thread.sleep(500);这样可以控制至少半秒钟才刷新一次然后再用this.pictureBox1.Refresh();这样就能保证每次大小变化后都会刷新,而且500毫秒内不会重复刷新 但是不管是bRefresh或是sleep,都还是会闪烁,哎~~,似乎不太可能完美解决此问题,谢谢大家的回答,特别是walkingmu,谢谢 我设了new old两个全局size,用来保存窗体的变化尺寸,然后在sizechanged中赋值这两个变量并判断窗体是放大还是缩小,缩小才重绘,效果不错,结贴了,谢谢大家 Button按钮点击后就一直呈现出选中状态,怎么设置可以点击后又还原呢? 常量字符串的初始话 谁能帮助我实现以下这个需求呢?内有详细。。。 C# 正则表达式取值 在textbox当中输入内容然后安回车,请问按回车可以触发哪个事件! 关于Response的问题 紧急求助:要自定义detailsview控件的更新事件处理,应该怎么做,各位有无例子代码? 如何立即释放系统资源?up有分 C#如何创建大位图 《微软.NET程序员系列》 隐藏基类方法有什么作用 timer控制着色彩变化的问题.
如果一定想收到paint消息,那么可以捕获SizeChanged事件,手动使窗体无效来解决
{
this.pictureBox1.Refresh();
}
this.pictureBox1.Refresh();
1.this.pictureBox1.Refresh();是窗体无效,并且重绘所有的子控件
2.this.pictureBox1.Invalidate();可以传一个矩形和bool参数,决定使多少空间重绘和是否重绘子控件
请教walkingmu,还有其它方法吗?
设置一个bool bRefresh变量.if(!bRefresh)
bRefresh=true;
else
{
bRefresh=false;
this.pictureBox1.Refresh();
}
这样应该就可以减少一半的闪烁。
比较好的做法应该是用线程控制。
sizechanged事件中判断线程是否启动,如果已经启动了就不启动
线程中用
Thread.sleep(500);
这样可以控制至少半秒钟才刷新一次
然后再用this.pictureBox1.Refresh();
这样就能保证每次大小变化后都会刷新,而且500毫秒内不会重复刷新