2013-03-27 7 views
-1

나는하여 RichTextBox를 생성하고이 코드 추가 :이 코드는() 사이의 텍스트 색을해야를 RichTextBox 텍스트 색상

private void richTextBox1_TextChanged(object sender, EventArgs e) 
    { 
     //() 
     int selectionStart = richTextBox1.SelectionStart; 
     string helpText = richTextBox1.Text; 
     int closerPos; 

     for (int i = 0; i < helpText.Length; i++) 
     { 
      if (helpText[i] == '(') 
      { 
       selectionStart = richTextBox1.SelectionStart; 
       closerPos = helpText.Substring(i).IndexOf(')') + i; 

       helpText = helpText.Substring(i + 1, closerPos - i - 1); 
       richTextBox1.Text = richTextBox1.Text.Remove(i + 1, closerPos - i - 1); 


       richTextBox1.Select(i + 1, 0); 
       richTextBox1.SelectionColor = Color.Red; 
       richTextBox1.SelectedText = helpText; 
       richTextBox1.SelectionColor = Color.Black; 


       helpText = richTextBox1.Text; 
       richTextBox1.SelectionStart = selectionStart; 
      } 
     } 
    } 

합니다. 예를 들어 는 :

(가)() 적색으로 착색 할 필요가 사이

텍스트 "안녕 텍스트 (sdadsasd) (컬러해야합니다)." 마지막 텍스트 만 색칠합니다. 어떻게 해결할 수 있습니까?

답변

0

if 조건으로 첫 번째 paranthesis 만 가져옵니다.

시도 분할은 helpText.Split('(');

같은 텍스트가 그 다음을 반복하고 논리를 않습니다.

+0

왜 분할해야합니까? – user2203448

+0

richtextbox의 텍스트 안에 몇 개의 텍스트가 있는지 알아야합니다. 실제로 코드는 first()를 찾은 다음 마칩니다. 분할하면 각() 영역에 대한 논리를 실행할 수 있습니다. – Xelom

+0

그래도이 코드가 작동하지 않는 이유는 아직 설명하지 않습니다. – user2203448

0

바이트 단위로 이동하지 않고도이 작업을 수행 할 수 있다고 생각합니다. IndexOf 메서드를 사용하여이를 시도 할 수 있습니다.

private void richTextBox1_TextChanged(object sender, EventArgs e) 
{ 
    string rbText = richTextBox1.Text; 

    int position = 0; 
    int startBrace = rbText.IndexOf('(', position) + 1; 

    while (startBrace != -1) 
    { 
     position = rbText.IndexOf(')', startBrace); 

     if (position != -1) 
     { 
      richTextBox1.Select(startBrace, position - startBrace); 
      richTextBox1.SelectionColor = Color.Red; 

      startBrace = rbText.IndexOf('(', position) + 1; 
     } 
     else 
      break; 
    } 
} 

나는 완전히이 코드를 테스트하지 않은 유의 사항 :

이것은 내가 생각했다 무언가이다.

0

이미 잠재적 인 문제가 있음을 알 수 있습니다. helpText는 단일 변수 문자열 일 때만 배열로 사용됩니다. helpText 전체를 char 배열로 분해 한 다음, 반복하여 대괄호를 찾으십시오.