2011-05-12 6 views
5

나는 내 RichTextBox 컨트롤에서 강조하고 싶은 단어 목록을 가지고 있는데, 어떻게 할 지에 대한 아이디어가 있지만 단어를 구분하기 위해 모든 것을 파싱하는 데 문제가 있습니다.Winforms RichTextBox에서 기본 구문 강조 표시를 구현하는 방법은 무엇입니까?

줄이나 전체 텍스트를 별도의 단어로 구문 분석 한 다음 어떻게 열거하고 RichTextBox.Select() 방법을 사용하여 색상을 지정할 수 있습니까?

좋은 방법입니까? 더 나은/빠른 방법이 있습니까?

+4

를 호출? –

답변

2

컨트롤에서 문자열을 찾으려면 RichTextBox.Find (String, Int32, Int32, RichTextBoxFinds) 메서드를 사용하십시오. 그런 다음 시작점을 현재 단어 뒤의 지점으로 변경하여 반복 할 수 있습니다.

이 구성표의 성능에는 확신이 없지만 작동 할 것입니다.

http://msdn.microsoft.com/en-us/library/yab8wkhy.aspx

1

시도 string.Split 방법. 구분 기호로 분리 된 문자열 배열을 반환합니다.

는 또한 당신이 그 링크 유용 찾을 수 있습니다 link1 link2

그리고 심지어 더 : 당신은 대신 RichTextBoxAvalon Edit을 사용할 수 있습니다

+0

감사합니다. 지금 시도해 보았습니다.하지만 작동해야하지만 그 단어가 어디에서 시작하는지, 같은 줄에 여러 개의 동일한 단어가있는 경우를 알아야하기 때문에 Select 메서드에 사용할 수없는 방법을 깨달았습니다. –

2

유사한 응용 프로그램의 벌금 example이, 그것은 무료입니다. #develop에서 사용 된 편집기입니다. #develop 소스 다운로드에서 어셈블리를 가져와야 할 수도 있지만 그만한 가치가 있습니다.

1

RichTextBox에서 문자열을 찾으려면 RichTextBox.Find 메서드를 사용할 수 있습니다. 이 메소드는 발견 된 텍스트의 위치를 ​​리턴합니다. 해당 링크의 코드 샘플은 텍스트를 강조 표시합니다.

1
아마

없는 가장 빠른 방법이지만 작동합니다.
먼저 전화 ClearHighLighting 이전 취소하고 downvoter 왜 말을 감히 수 SetHighLighting

private readonly List<HighLight> _highLights = new List<HighLight>(); 
private class HighLight 
{ 
    public int Start { get; set; } 
    public int End { get; set; } 
} 

public void SetHighLighting(string text) 
{ 

    // Clear Previous HighLighting 
    ClearHighLighting(); 

    if (text.Length > 0) 
    { 
     int startPosition = 0; 
     int foundPosition = 0;    
     while (foundPosition > -1) 
     { 
      foundPosition = richTextBox1.Find(text, startPosition, RichTextBoxFinds.None); 
      if (foundPosition >= 0) 
      { 
       richTextBox1.SelectionBackColor = Color.Yellow; 
       int endindex = text.Length; 
       richTextBox1.Select(foundPosition, endindex);       
       startPosition = foundPosition + endindex;       
       _highLights.Add(new HighLight() { Start = foundPosition, End = endindex }); 
      } 
     } 
    } 
} 

public void ClearHighLighting() 
{ 
    foreach (var highLight in _highLights) 
    { 
     richTextBox1.SelectionBackColor = richTextBox1.BackColor; 
     richTextBox1.Select(highLight.Start, highLight.End);       
    } 
    _highLights.Clear(); 
} 
관련 문제