有没有办法在操作控件时推迟更新/重新绘制表单?推迟表单更新
我在窗体上使用TableLayoutPanel
控件,我想在运行时动态地将不同的用户控件添加到表格的不同单元格中。
当我这样做时,屏幕更新太慢,并且有一些闪烁的动作发生。
tablelayout.SuspendLayout()
SuspendLayout()
似乎没有效果。
有没有办法在操作控件时推迟更新/重新绘制表单?推迟表单更新
我在窗体上使用TableLayoutPanel
控件,我想在运行时动态地将不同的用户控件添加到表格的不同单元格中。
当我这样做时,屏幕更新太慢,并且有一些闪烁的动作发生。
tablelayout.SuspendLayout()
SuspendLayout()
似乎没有效果。
我完全得到了通过创建一个继承了表,然后启用doublebuffering类摆脱闪烁。
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace myNameSpace.Forms.UserControls
{
public class TableLayoutPanelNoFlicker : TableLayoutPanel
{
public TableLayoutPanelNoFlicker()
{
this.DoubleBuffered = true;
}
}
}
它取决于控制;寻找BeginUpdate
/EndUpdate
或BeginEdit
/EndEdit
等(并将它们用于try
/finally
区块)。但是,请注意,只有一些控件具有这些方法,并且它们不绑定到方便的接口,因此它有点手动。例如:
listView.BeginUpdate();
try
{
for (int i = 0; i < 100; i++)
{
listView.Items.Add("Item " + i);
}
}
finally
{
listView.EndUpdate();
}
请注意,数据绑定控件可能具有用于禁用与数据相关的更改的其他机制;例如,BindingList<T>
有一个可设置的RaiseListChangedEvents
,可在编辑数据时关闭更改通知。你也可以看看像“虚拟模式”的东西。
您可以尝试SuspendLayout/ResumeLayout - 这是表单设计器生成的代码如何执行它 - 在表单后面的代码中查看InitializeComponents方法以查看我的意思。
尝试:
try {
SuspendLayout();
// manipulate your controls
} finally {
ResumeLayout();
}
重复的http://stackoverflow.com/questions/126876/how-do-i-disable-updating-a-form-in-winforms – 2010-02-02 21:03:19