有沒有辦法在操作控件時推遲更新/重新繪製表單?推遲表單更新
我在窗體上使用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