我的应用程序上有一个可以由用户调整大小的控件,它有一些按钮固定在右上方,还有一个滚动条。
问题是,当控件调整大小时,固定在右侧的控件也会改变位置,并且只有几毫秒后控件才会进入正确的位置。所以它似乎是孩子控制"摇晃"调整父控件的大小。
我已经尝试了各种各样的事情,比如在父控件上使用SuspendLayout
和ResumeLayout
,将每个控件上的双缓冲和其他样式设置为true,设置WS_EX_COMPOSITED
位,但是似乎没有什么能让这个问题消失
此问题也存在于其他应用程序中,并且非常烦人。
那么无论如何要在.net上解决这个问题 也许让它将所有内容渲染到后台缓冲区,然后当所有内容完成后将其渲染到屏幕上?
答案 0 :(得分:2)
我会创建一个在调整大小后触发的新事件,使用一个小的计时器魔法停止并在每个调整大小事件上启动一个间隔大约50毫秒的计时器,你可以创建这个假的ResizeEnd事件。
在第一次调整大小事件时,我将使用dllimport调用停止绘制UI(不记得它是什么)以停止绘制窗口或控件的内容。然后在完成调整大小时,使用相同的dllimport调用再次启用绘图。
效果是它只会在调整大小后重绘,如果在调整大小时暂停,则每50ms重绘一次。
ResizeEnd:WinForms - action after resize event
SuspendDrawing:How do I suspend painting for a control and its children?
答案 1 :(得分:0)
使用System.Drawing;
覆盖命名空间中的以下虚拟方法 protected override Point ScrollToControl(Control activeControl)
{
return AutoScrollPosition;
}
应该解决问题!