我的应用程序控件可以由用户调整大小,它有一些按钮固定在右上方,还有一个滚动条.
问题是,当控件调整大小时,固定在右侧的控件也会改变位置,并且只有几毫秒后控件才会进入正确的位置.因此,在调整父控件的大小时,看起来孩子控制“摇动”.
我已经尝试过各种各样的事情,比如在父控件上使用SuspendLayout和ResumeLayout,在每个控件上设置双缓冲和其他样式为true,设置WS_EX_COMPOSITED位,但似乎没有任何东西可以解决这个问题.
这个问题也出现在其他应用程序上,非常烦人.
那么无论如何要在.net上修复它?
也许让它将所有内容渲染到后台缓冲区,然后当一切都完成后渲染到屏幕上?
最佳答案 我会创建一个新的事件,在调整大小完成后触发,使用一个小的计时器魔法停止并在每个调整大小事件上启动一个间隔大约50毫秒的计时器,你可以创建这个假的ResizeEnd事件.
在第一次调整大小事件时,我将使用dllimport调用(不记得是什么)停止绘制UI以停止绘制窗口或控件的内容.然后在完成调整大小时,使用相同的dllimport调用再次启用绘图.
效果是它只会在调整大小后重绘自己,或者如果你在调整大小时暂停每50ms重绘一次.
ResizeEnd:WinForms – action after resize event
SuspendDrawing:How do I suspend painting for a control and its children?