2012-03-25 37 views

回答

0

您是否尝试过使用WinForm/Control的DoubleBuffer功能?

+0

我使用了一种特殊的技巧,假设双倍缓冲屏幕上的每个控件。现在我的闪烁很小,但调整性能很糟糕。 – 2012-03-25 05:01:38

3

是;此行为由其中一种窗口样式定义,您可以使用Control.SetStyles方法打开/关闭该窗口样式。特别是,我想你想要这样的:

myForm.SetStyle(ControlStyles.ResizeRedraw, false); 

你可以再勾鼠标按下/调整/鼠标松开事件,并强制重绘当你想要发生。

您也可以尝试启用双缓冲风格:

myForm.SetStyle(ControlStyles.DoubleBuffer, true); 

请参阅本文的详细信息:http://msdn.microsoft.com/en-us/library/fkf25009(v=vs.100).aspx

+0

setstyle似乎没有效果。 – 2012-03-25 05:16:55

+1

您可能需要在更改样式后调用UpdateStyles。 – 2012-03-25 16:43:53

0

如何使用ResizeEnd代替Resize

1

完全抑制所有绘图并不实际,窗框画不在您的直接控制范围内。也不是必须的,你所要做的就是在表单被调整大小时快速绘制图形。就像这样:

private bool fastRender; 

    protected override void OnResizeBegin(EventArgs e) { 
     fastRender = true; 
     base.OnResizeBegin(e); 
    } 

    protected override void OnResizeEnd(EventArgs e) { 
     base.OnResizeEnd(e); 
     fastRender = false; 
     this.Invalidate(); 
    } 

并为您在您的Paint事件处理程序的fastRender变量,仅绘制的最小值。或者什么也没有。如果实际的延迟是由大量控件引起的,那么通过使它们在ResizeBegin中不可见并在ResizeEnd中再次可见来解决这个问题。易于使用面板。如果是由停靠的控件引起,或者设置了锚点,以便在用户调整窗口大小时调整大小或移动,则会发现Suspend/ResumeLayout有用。

+0

在我的情况下,这是一个非常大的停靠的datagridview,真的会减慢速度。 – 2012-03-25 17:41:18

+0

我只是回想起windows 95的日子,那里有一个很好的矩形,显示了新窗口的尺寸,当你放开窗口时,窗口的大小适合这个尺寸。我不记得它是什么时候改变为每次增加调整大小再次绘制窗口。 – 2012-03-25 17:44:54

+0

如果它只是停靠的DGV,那么在OnResizeEnd()中调用OnResizeBegin和ResumeLayout(true)中的SuspendLayout将会很好地工作。调整窗口大小时,DGV不会重新绘制,因此它会光滑平滑。 – 2012-03-25 17:55:43

0

打开异常大小的窗口;然后按住控制键,按下+键,直到您恢复到所需的尺寸。祝你好运。