winform,override OnPaint()不执行一般有哪几种情况可能导致

时间:2022-02-16 17:11:37
RT,OnPaint重载,窗体Load完了,没有执行OnPaint()函数,不知道为什么会出现这种情况;
写了一个自定义控件,当中写有多个this.Invalidate(),有网友说是写了多个this.Invalidate()导致的,
但是我在同一个解决方案中添加一个form,在代码中写OnPaint的重载,发现有执行;
由于项目太大,使用了好几种排除法,依然找不出问题出在哪里;
于是来这边问各位前辈,不晓得一般有哪几种情况会导致OnPaint不执行的,谢谢指教!!!

9 个解决方案

#1


winform,override OnPaint()不执行一般有哪几种情况可能导致有懂得吗,谢谢咯,在线等

#2


winform,override OnPaint()不执行一般有哪几种情况可能导致我发现如果最小化后在还原,onpaint就会执行,那么如何让onpaint持续执行呢

#3


开一个线程,隔一秒执行一次 this.Invalidate()

#4


引用 3 楼  的回复:
开一个线程,隔一秒执行一次 this.Invalidate()
谢谢,我试试

#5


引用 3 楼  的回复:
开一个线程,隔一秒执行一次 this.Invalidate()
没有效果,依然不执行OnPaint函数

#6


你看是不是某个地方重写了 ,WndProc,在那里面有可能会把重汇的消息给block了。

#7


引用 6 楼  的回复:
你看是不是某个地方重写了 ,WndProc,在那里面有可能会把重汇的消息给block了。
搜索了整个解决方案,没有找到WndProc

#8


那再问一句,你写的这个自定义的控件的基类型是什么啊? 某些控件不会调用OnPaint
例如 TextBox, ComboBox
这些空间要调用类似于OnPaint的方法就需要 重新 WndProc 捕获 message值 0x0085 的那个,在那个时候进行重汇。

#9


引用 8 楼  的回复:
那再问一句,你写的这个自定义的控件的基类型是什么啊? 某些控件不会调用OnPaint
例如 TextBox, ComboBox
这些空间要调用类似于OnPaint的方法就需要 重新 WndProc 捕获 message值 0x0085 的那个,在那个时候进行重汇。
谢谢,基类型是UserControl

#1


winform,override OnPaint()不执行一般有哪几种情况可能导致有懂得吗,谢谢咯,在线等

#2


winform,override OnPaint()不执行一般有哪几种情况可能导致我发现如果最小化后在还原,onpaint就会执行,那么如何让onpaint持续执行呢

#3


开一个线程,隔一秒执行一次 this.Invalidate()

#4


引用 3 楼  的回复:
开一个线程,隔一秒执行一次 this.Invalidate()
谢谢,我试试

#5


引用 3 楼  的回复:
开一个线程,隔一秒执行一次 this.Invalidate()
没有效果,依然不执行OnPaint函数

#6


你看是不是某个地方重写了 ,WndProc,在那里面有可能会把重汇的消息给block了。

#7


引用 6 楼  的回复:
你看是不是某个地方重写了 ,WndProc,在那里面有可能会把重汇的消息给block了。
搜索了整个解决方案,没有找到WndProc

#8


那再问一句,你写的这个自定义的控件的基类型是什么啊? 某些控件不会调用OnPaint
例如 TextBox, ComboBox
这些空间要调用类似于OnPaint的方法就需要 重新 WndProc 捕获 message值 0x0085 的那个,在那个时候进行重汇。

#9


引用 8 楼  的回复:
那再问一句,你写的这个自定义的控件的基类型是什么啊? 某些控件不会调用OnPaint
例如 TextBox, ComboBox
这些空间要调用类似于OnPaint的方法就需要 重新 WndProc 捕获 message值 0x0085 的那个,在那个时候进行重汇。
谢谢,基类型是UserControl