반응형
Windows Forms 애플리케이션을 개발할 때, 디버깅 및 로깅 용도로 RichTextBox 컨트롤을 사용하는 경우가 많습니다. 이때 RichTextBox에 텍스트를 추가하고 자동으로 스크롤을 내리는 기능은 매우 유용합니다.
아래는 RichTextBox에 텍스트를 추가하고 자동으로 스크롤을 내리는 C# 코드입니다
public void AddDebugLog(string message)
{
if (rchDebug.InvokeRequired)
{
rchDebug.Invoke(new MethodInvoker(() =>
{
if (rchDebug.Text.Length > 1000000) rchDebug.Clear();
rchDebug.AppendText(message + Environment.NewLine);
rchDebug.SelectionStart = rchDebug.TextLength;
rchDebug.ScrollToCaret();
}));
}
else
{
if (rchDebug.Text.Length > 1000000) rchDebug.Clear();
rchDebug.AppendText(message + Environment.NewLine);
rchDebug.SelectionStart = rchDebug.TextLength;
rchDebug.ScrollToCaret();
}
}
이 코드는 다음과 같은 기능을 수행합니다:
- rchDebug.Text.Length > 1000000일 경우 RichTextBox의 내용을 모두 지웁니다. 이는 RichTextBox의 크기를 관리하기 위해서입니다.
- rchDebug.AppendText(message + Environment.NewLine);을 통해 메시지를 RichTextBox에 추가합니다.
- rchDebug.SelectionStart = rchDebug.TextLength;를 통해 텍스트의 끝 부분을 선택합니다.
- rchDebug.ScrollToCaret();을 통해 선택한 부분으로 자동으로 스크롤합니다.
여기서 주목해야 할 부분은 rchDebug.InvokeRequired를 사용하는 이유입니다.
RichTextBox와 같은 Windows Forms 컨트롤은 UI 스레드에서만 접근할 수 있습니다. 따라서 별도의 스레드에서 RichTextBox를 업데이트하려면 Invoke 메서드를 사용하여 UI 스레드에서 실행해야 합니다.
rchDebug.InvokeRequired를 체크하여 현재 스레드가 UI 스레드인지 확인합니다. 만약 UI 스레드가 아니라면 rchDebug.Invoke()를 사용하여 UI 스레드에서 텍스트 추가 및 스크롤 작업을 수행합니다.
이렇게 함으로써 비UI 스레드에서도 안전하게 RichTextBox를 업데이트할 수 있습니다.
이 코드를 사용하면 디버깅 및 로깅 용도로 RichTextBox를 편리하게 사용할 수 있습니다. 텍스트 추가와 자동 스크롤 기능을 통해 개발 및 테스트 과정에서 로그를 빠르게 확인할 수 있습니다.
'C# > Window' 카테고리의 다른 글
Windows Forms의 ComboBox에 아이템 추가하는 방법들 (0) | 2024.07.29 |
---|---|
.NET 프로젝트의 출력 폴더 이름 변경하기 (0) | 2024.07.28 |
Windows Forms PictureBox (3) | 2024.07.24 |
비동기 프로그래밍에서 Task.Delay의 독립적인 실행 (0) | 2024.07.22 |
SendMessage와 PostMessage (0) | 2024.05.26 |