[C# 윈폼] C# 화면 깜빡임, 버벅거림(렉걸림) 해결하는 방법, DoubleBuffer 사용
- C#/Windows Form
- 2020. 7. 11. 00:00
안녕하세요.
오늘은 C# 윈폼에서 화면 깜박임, 혹은 윈폼 프로젝트를 개발해서 실행시키시다 보면 버벅거림(렉걸림) 현상이 나타나게 되는데요.
이러한 현상을 조금이나마 완화? 시켜줄 수 있는 방법에 대해서 알려드리려고 합니다.
저는 테스트 시나리오를 다음과 같이 구성하였습니다.
1. TableLayoutPanel 컨트롤을 제일 아랫단에 배치
2. TableLayoutPanel 컨트롤 3개의 행 설정
3. 첫 번째 행에는 “Hide Condition” 버튼 컨트롤 추가
4. 두 번째 행에는 FlowLayoutPanel 배치 후, 그 안에 여러 개의 Button 배치
5. 마지막으로, Hide Condition 버튼을 클릭할 시, 2번째 행의 여러 버튼들이 사라지게 하고, 다시 Hide Condition 버튼을 클릭할 시 버튼들이 다시 보이게 끔
위와 같은 시나리오 대로 한번 예제 코드를 작성해 보도록 하겠습니다.
윈폼 프로젝트 생성 및 컨트롤 배치
이제 예제 코드를 작성해서 이 프로젝트에서 화면 컨트롤 바뀜에도 불구하고 최대한 버벅거림? 현상이 덜 되도록 예제 코드를 작성해 보도록 하겠습니다.
예제 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace DoubleBufferTest { public partial class Form1 : Form { public Form1() { InitializeComponent();
this.uiBtn_ShowMainCondition.Click += uiBtn_ShowMainCondition_Click; }
/// <summary> /// 윈폼 모든 컨트롤 더블 버퍼링 핸들 /// 이로 인해, 화면 그려지는거 부드러워짐 /// (정확한 이유는 모름...) /// </summary> protected override CreateParams CreateParams { get { var cp = base.CreateParams; cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED return cp; } }
/// <summary> /// 버튼 클릭 이벤트 핸들러 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void uiBtn_ShowMainCondition_Click(object sender, EventArgs e) { Button btn = sender as Button;
if (btn.Text == "Show Condition") { HideSearchCondition(btn); //Search Option 숨기기 } else { ShowSearchCondition(btn); //Search Option 보여주기 } }
/// <summary> /// Search Option 숨기기 /// </summary> /// <param name="btn"></param> private void HideSearchCondition(Button btn) { uiTlp_Main.RowStyles[1].Height = 100; btn.Text = "Hide Condition"; btn.ForeColor = Color.Red; }
/// <summary> /// Search Option 보여주기 /// </summary> /// <param name="btn"></param> private void ShowSearchCondition(Button btn) { //uiTpl_Main_Height = uiTlp_Main.RowStyles[1].Height; uiTlp_Main.RowStyles[1].Height = 0; btn.Text = "Show Condition"; btn.ForeColor = Color.Blue; } } }
|
실행 결과
어떠신가요? 버튼 클릭을 하였을 때 화면들이 부드럽게 바뀐다는 느낌이 들지 않으신가요?ㅋㅋ
바로 CreateParams 를 이용해서 핸들을 다뤄서 윈폼에서 버벅거림 현상을 줄이도록 해보았습니다..
사실, 저도 이게 정확히 어떤 원리로 화면 버벅거림이 없어지는지는 모르겠으나..확실히 있고 없고의 차이는 크게 느껴지더라구요!ㅎㅎ
참고해 주시면 좋을 듯 합니다.^^
감사합니다.
'C# > Windows Form' 카테고리의 다른 글
[C# 윈폼] C# 윈폼 Pnael 컨트롤 그라데이션 효과 주기 (0) | 2020.07.13 |
---|---|
[C# 윈폼] C# 컨트롤 Tooltip 메뉴 생성 및 설정하기 (0) | 2020.07.12 |
[C# 문법] C# Color 값 16진수 색상 코드 사용하기 (0) | 2020.07.06 |
[C# 윈폼] TableLayoutPanel 에 컨트롤 추가하기 (0) | 2020.06.28 |
[C# 윈폼] 윈폼으로 SlideForm 만들기 (5) | 2020.06.25 |
이 글을 공유하기