컨트롤을 조작하는 동안 양식의 업데이트/다시 그리기를 연기 할 수 있습니까?양식 지연 업데이트
내 양식에 TableLayoutPanel
컨트롤을 사용하고 있으며 런타임에 동적으로 테이블의 다른 셀에 다른 사용자 컨트롤을 제거/추가하려고합니다.
이렇게하면 화면 업데이트가 너무 느리고 깜박 거리는 동작이 발생합니다.
tablelayout.SuspendLayout()
SuspendLayout()
컨트롤을 조작하는 동안 양식의 업데이트/다시 그리기를 연기 할 수 있습니까?양식 지연 업데이트
내 양식에 TableLayoutPanel
컨트롤을 사용하고 있으며 런타임에 동적으로 테이블의 다른 셀에 다른 사용자 컨트롤을 제거/추가하려고합니다.
이렇게하면 화면 업데이트가 너무 느리고 깜박 거리는 동작이 발생합니다.
tablelayout.SuspendLayout()
SuspendLayout()
.
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 메서드 내에서 모양을보고 무슨 뜻인지 확인할 수 있습니다.
시도 : 나는 완전히 테이블, 다음 활성화 doublebuffering을 상속하는 클래스를 작성하여 깜박임을 제거있어
try {
SuspendLayout();
// manipulate your controls
} finally {
ResumeLayout();
}
중복 된 http://stackoverflow.com/questions/126876/how-do-i-disable-updating-a-form-in-winforms –