2012-11-29 20 views
0

正在使用下面的代碼,將窗體添加到一個標籤頁的TabControls如何在使用tabControl.TabPages [0] .Controls.Add()時停止窗體閃爍?

private void btnStudents_Click(object sender, EventArgs e) 
    { 
     foreach (Form c in tabStudents.TabPages[0].Controls) 
     { 
      tabStudents.TabPages[0].Controls.Remove(c); 
      c.Dispose(); 
     } 

     //load form 
     StudentsMasterForm f = new StudentsMasterForm 
     { 
      TopLevel = false, 
      FormBorderStyle = FormBorderStyle.None, 
      Dock = DockStyle.Fill 
     }; 

     tabStudents.TabPages[0].Controls.Add(f); 
     f.Show(); 
    } 

問題不過是,有按鈕被點擊時,過多的形式閃爍(當加載的形式即)。我嘗試過使用tabCustomersAndOrders.TabPages[0].SuspendLayout(); tabCustomersAndOrders.TabPages[0].ResumeLayout(); `但閃爍不會消失。

我想從一種形式轉換到另一種形式以儘可能平滑。

+0

回答這個問題解決了問題 http://stackoverflow.com/questions/2612487/how-to-fix-the-flickering-in-user-controls?lq = 1 – StackTrace

回答

1

對TabControl啓用雙緩衝可能有幫助。使用雙緩衝時,控制圖形全部被渲染到內存中,然後僅在所有控件渲染完成時才顯示。

這將意味着一個可見的延遲直到完成,但應該消除多個控件呈現的閃爍效果。

下面將啓用雙緩衝:

myTabControl.SetStyle(ControlStyles.DoubleBuffer | 
     ControlStyles.UserPaint | 
     ControlStyles.AllPaintingInWmPaint, 
     true); 

另一種方法(該一個我建議)是看該問題從不同的角度。有什麼方法可以改變用戶界面設計,以便這種表單填充是預先緩存的,或者在渲染到屏幕之前出現?