컨트롤이 많은 처리를 하거나, 컨트롤에 표시되는 데이터가 짧은 시간 안에 여러 번 갱신되어야 할 때 컨트롤이 깜빡거리는 현상을 볼 수 있다. (특히 ListView나 PictureBox 등)
이러한 현상을 해결하기 Control 클래스에는 위해 컨트롤의 이중 버퍼링을 활성화하여 깜빡임을 최소화하는 DoubleBuffered 속성이 존재하는데, 이 속성은 protected로 선언되어 있기 때문에 Control 클래스를 상속받아 생성되는 컨트롤에서 DoubleBuffered 속성에 접근하기 위한 별도의 방법을 public으로 제공하지 않는다면 속성 창을 통해서, 또는 참조 변수를 통해 접근할 수 없다.
그러나 Reflection 기능을 사용해서 이 속성을 켜줄 수 있다.
아래 코드를 폼의 생성자 등 적절한 위치에 넣어서 컨트롤을 사용하기 전에 DoubleBuffered 속성을 켜주면 깜빡임이 어느 정도 해소되는 것을 확인할 수 있을 것이다.
using System.Reflection; // GetProperty() 메서드 사용을 위해 추가
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// ListView의 속성에서 DoubleBuffered 속성에 대한 정보를 검색하고, listView1의 해당 속성 값을 true로 변경
listView1.GetType().GetProperty("DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(listView1, true);
}
}
'.NET > WinForm' 카테고리의 다른 글
[WinForm] 마우스 휠로 이미지 확대/축소 (0) | 2021.07.21 |
---|---|
[WinForm] 텍스트박스 입력 무시/숫자만 입력 가능하도록 하기 (0) | 2021.07.13 |
[WinForm] 크로스 스레드(Cross Thread) 문제 해결 (0) | 2021.07.13 |
[WinForm] RichTextBox의 글꼴이 자동으로 변경될 때 (0) | 2021.07.13 |
[WinForm] Form이 열려있는지 확인하는 방법 (0) | 2021.07.12 |