일부 강조 표시를 수행하는 데 사용하고있는 richTextBox가 있습니다.RichTextBox BeginUpdate() EndUpdate() 확장 메서드가 작동하지 않습니다.
Application.Idle += new EventHandler(Application_Idle);
시 : 대신 내가 Regex
들 사용하고 Application.Idle
이벤트에 대한 이벤트 처리기를 사용하여 입력 지연의 검출에 업데이트하고 - 이것은 내가 정의 구문 하이 라이터를 작성하지 않은, 그래서 작은 편집 시설입니다 핸들러 나는 텍스트 상자가 비활성화 된 시간을 확인 :
private void Application_Idle(object sender, EventArgs e)
{
// Get time since last syntax update.
double timeRtb1 = DateTime.Now.Subtract(_lastChangeRtb1).TotalMilliseconds;
// If required highlight syntax.
if (timeRtb1 > MINIMUM_UPDATE_DELAY)
{
HighlightSyntax(ref richTextBox1);
_lastChangeRtb1 = DateTime.MaxValue;
}
}
그러나 심지어 상대적으로 작은 하이라이트의 RichTextBox
심하게 깜박하고는 더 richTextBox.BeginUpdate()/EndUpdate()
방법이 없습니다. 이 문제를 극복하기 위해 나는 this answer to a similar dilemma by Hans Passant이 (한스 옆모습이 아래로 나를 보자 적이있다!) 발견 : 그러나
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);
}
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
private const int WM_SETREDRAW = 0x0b;
}
, 이것은 나에게 업데이 트에 따라 이상한 행동을 제공합니다; 커서가 죽거나 얼어 이상한 모양의 줄무늬가 보입니다 (아래 이미지 참조).
나는 명확하게 UI를 업데이트하는 다른 스레드를 사용할 수 없습니다 , 그래서 내가 잘못 여기서 뭐하는 거지?
감사합니다.
민트입니다. 매력처럼 작동 ... 하나의 작은 질문, 당신은 어떻게 확장 메서드 및 그들의 미묘함에 대해 배울 수 있습니까? 'SendMessage (this.Handle, WM_SETREDRAW, (IntPtr) 1, IntPtr.Zero);'정확히 표준 C#이 아닙니다! 아니면 그렇지? – MoonKnight
@Killercam'SendMessage'와 확장 기능은 두 가지입니다. 'SendMessage'는 Windows API 함수를 호출합니다. Extension에 대해서는 [Extension Methods (C# 프로그래밍 가이드)] (http://msdn.microsoft.com/en-us/library/bb383977.aspx)를 참조하십시오. – LarsTech
답장을 보내 주셔서 감사합니다. 나는이 둘이 다르다는 것을 깨닫는다. 링크 및 귀하의 도움을 주셔서 감사합니다, 그것은 가장 감사하겠습니다. – MoonKnight