2010-02-02 82 views
1

有沒有辦法在操作控件時推遲更新/重新繪製表單?推遲表單更新

我在窗體上使用TableLayoutPanel控件,我想在運行時動態地將不同的用戶控件添加到表格的不同單元格中。

當我這樣做時,屏幕更新太慢,並且有一些閃爍的動作發生。

tablelayout.SuspendLayout() 

SuspendLayout()似乎沒有效果。

+0

重複的http://stackoverflow.com/questions/126876/how-do-i-disable-updating-a-form-in-winforms – 2010-02-02 21:03:19

回答

1

我完全得到了通過創建一個繼承了表,然後啓用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; 
     } 
    } 
} 
1

它取決於控制;尋找BeginUpdate/EndUpdateBeginEdit/EndEdit等(並將它們用於try/finally區塊)。但是,請注意,只有一些控件具有這些方法,並且它們不綁定到方便的接口,因此它有點手動。例如:

listView.BeginUpdate(); 
    try 
    { 
     for (int i = 0; i < 100; i++) 
     { 
      listView.Items.Add("Item " + i); 
     } 
    } 
    finally 
    { 
     listView.EndUpdate(); 
    } 

請注意,數據綁定控件可能具有用於禁用與數據相關的更改的其他機制;例如,BindingList<T>有一個可設置的RaiseListChangedEvents,可在編輯數據時關閉更改通知。你也可以看看像「虛擬模式」的東西。

0

您可以嘗試SuspendLayout/ResumeLayout - 這是表單設計器生成的代碼如何執行它 - 在表單後面的代碼中查看InitializeComponents方法以查看我的意思。

1

嘗試:

try { 
    SuspendLayout(); 

    // manipulate your controls 

} finally { 
    ResumeLayout(); 
}