RichTextBox에 텍스트 추가하고 자동 스크롤하기

2024. 7. 23. 10:28·C#/Window
반응형

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();
    }
}

이 코드는 다음과 같은 기능을 수행합니다:

  1. rchDebug.Text.Length > 1000000일 경우 RichTextBox의 내용을 모두 지웁니다. 이는 RichTextBox의 크기를 관리하기 위해서입니다.
  2. rchDebug.AppendText(message + Environment.NewLine);을 통해 메시지를 RichTextBox에 추가합니다.
  3. rchDebug.SelectionStart = rchDebug.TextLength;를 통해 텍스트의 끝 부분을 선택합니다.
  4. 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에 아이템 추가하는 방법들  (2) 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
'C#/Window' 카테고리의 다른 글
  • .NET 프로젝트의 출력 폴더 이름 변경하기
  • Windows Forms PictureBox
  • 비동기 프로그래밍에서 Task.Delay의 독립적인 실행
  • SendMessage와 PostMessage
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    리뷰관리
    ipcamera
    codingcommunity
    cv2
    믈레코비타멸균우유
    codingtips
    라떼우유
    unity
    rtsp
    파이썬
    유니티
    쇼핑몰리뷰
    셀레니움
    devlife
    긴유통기한우유
    스크립트 실행
    카페24리뷰
    programmerlife
    C#
    learntocode
    카페24리뷰이관
    Python
    리뷰이관
    programming101
    리스트
    스크립트 실행 순서
    appdevelopment
    list
    스마트스토어리뷰
    상품 리뷰 크롤링
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
RichTextBox에 텍스트 추가하고 자동 스크롤하기
상단으로

티스토리툴바