2010-02-02 5 views
1

컨트롤을 조작하는 동안 양식의 업데이트/다시 그리기를 연기 할 수 있습니까?양식 지연 업데이트

내 양식에 TableLayoutPanel 컨트롤을 사용하고 있으며 런타임에 동적으로 테이블의 다른 셀에 다른 사용자 컨트롤을 제거/추가하려고합니다.

이렇게하면 화면 업데이트가 너무 느리고 깜박 거리는 동작이 발생합니다.

tablelayout.SuspendLayout() 

SuspendLayout()

효과가 없습니다 것으로 보인다.

+0

중복 된 http://stackoverflow.com/questions/126876/how-do-i-disable-updating-a-form-in-winforms –

답변

1

.

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/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이 있습니다. "가상 모드"와 같은 것을 볼 수도 있습니다.

0

SuspendLayout/ResumeLayout을 시도해 볼 수 있습니다. 이것은 폼 디자이너가 생성 한 코드에서 폼의 InitializeComponents 메서드 내에서 모양을보고 무슨 뜻인지 확인할 수 있습니다.

1

시도 : 나는 완전히 테이블, 다음 활성화 doublebuffering을 상속하는 클래스를 작성하여 깜박임을 제거있어

try { 
    SuspendLayout(); 

    // manipulate your controls 

} finally { 
    ResumeLayout(); 
}