当我改变左侧位置和宽度时,如何阻止控制旋转?

时间:2008-12-01 17:25:49

标签: c# winforms

我有一个控件,用户可以使用鼠标调整大小。当他们移动右侧时,我只是改变宽度,一切正常。

但是,当他们移动左侧大小时,我必须更改“左”和“宽度”属性。控制器的右侧明显抽搐,显示新位置的旧宽度。

如果我使用Bounds一次设置左侧和宽度,它仍会抽搐;我是否将SetStyle与UserPaint,Opaque,OptimizedDoubleBuffer,AllPaintingInWmPaint或ResizeRedraw中的任何一个一起使用;以及它是否是双缓冲的。如果我在控件或其父控件上调用SuspendLayout()/ ResumeLayout(),它仍会抽搐。

当我改变左侧位置和宽度时,如何阻止控制旋转?

3 个答案:

答案 0 :(得分:5)

您可能希望在移动/调整大小之前尝试在包含的表单上调用Control.SuspendLayout(),然后Control.ResumeLayout()

听起来无论您将控件设置为什么模式,更改边界时触发的某些事件都会在设置两个值之前重绘它。它可能与表单有关。

编辑:我在SO上看到了这个similar question,你提到你已经使用过SetStyle()了,但也许你可以选择一些选项组合来给你带来所需的效果。

希望有所帮助!

答案 1 :(得分:0)

这有用吗? http://richardsbraindump.blogspot.com/2007/09/how-to-create-flicker-free.html

我不知道您是否将SetStyle与这些参数一起使用。

如果这没有帮助,我会删除其他答案我会从网址添加代码片段。

答案 2 :(得分:0)

而不是进行实时调整大小,可能显示sizer / ghost矩形会更好。然后,当用户将鼠标移动时,请将控件重新调整一次。

这是一篇解释Win32 / C ++方法的文章 http://www.dotnetheaven.com/Uploadfile/amitnabarro/resize_rt04082005085351AM/resize_rt.aspx

您可以使用控件容器的Graphics对象绘制一个没有闪烁的边界矩形。