실시간 RichTextBox 구문 강조를 위한 다시 그리기 비활성화
특정 프로그래밍 시나리오에서는 키워드나 특정 단어를 동적으로 강조 표시해야 할 수도 있습니다. 사용자가 입력하는 RichTextBox입니다. 그러나 계속해서 다시 칠하면 입력 시 깜박임과 불편함이 발생할 수 있습니다.
사용자 경험을 개선하려면 텍스트를 편집하는 동안 RichTextBox의 자동 다시 그리기를 비활성화할 수 있습니다. 불행하게도 표준 RichTextBox 클래스는 이에 대한 내장 메서드를 제공하지 않습니다.
외부 클래스로 RichTextBox 사용자 정의
한 가지 해결책은 사용자 정의 RichTextBox 클래스를 만드는 것입니다. 누락된 기능을 추가하는 것입니다. 예는 다음과 같습니다.
using System; using System.Windows.Forms; using System.Runtime.InteropServices; class MyRichTextBox : RichTextBox { public void BeginUpdate() { SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero); } public void EndUpdate() { SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); this.Invalidate(); } [DllImport("user32.dll")] private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); private const int WM_SETREDRAW = 0x0b; }
그런 다음 실시간으로 키워드를 강조 표시하는 사용자 정의 함수에서 BeginUpdate() 및 EndUpdate() 메서드를 사용할 수 있습니다.
void HighlightKeywords(MyRichTextBox richTextBox) { richTextBox.BeginUpdate(); // Highlight keywords and bad words richTextBox.EndUpdate(); }
직접 P/Invoke를 사용하여 다시 그리기 제어
또는 사용자 정의를 사용하여 우회할 수 있습니다. 클래스를 생성하고 WM_SETREDRAW 메시지와 함께 SendMessage 메서드를 사용하여 다시 그리기를 직접 제어합니다.
RichTextBox의 텍스트를 업데이트하기 전:
[DllImport("user32.dll")] static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); const int WM_SETREDRAW = 0x0b; // (Disable repainting) SendMessage(richTextBox.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero);
RichTextBox의 텍스트를 업데이트한 후:
// (Enable repainting) SendMessage(richTextBox.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); richTextBox.Invalidate();
이 접근 방식을 사용하면 표준 RichTextBox 클래스를 수정하지 않고도 동일한 결과를 얻을 수 있습니다.
위 내용은 실시간 구문 강조를 위해 RichTextBox 다시 그리기를 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!