2016-07-05 1 views
0

텍스트의 일부분을 색칠합니다. 목록보기 selectedIndex의 이벤트에서richTextBox에서 텍스트의 한 부분 이상을 채색하려고 할 때 전혀 색칠하지 않는 이유는 무엇입니까?

void lvnf_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (ListViewCostumControl.lvnf.SelectedItems.Count > 0) 
    { 
     string word = textBox1.Text; 
     string[] test = word.Split(','); 
     foreach (string myword in test) 
     { 
      richTextBox1.Text = File.ReadAllText(ListViewCostumControl.lvnf.Items[ListViewCostumControl.lvnf.SelectedIndices[0]].Text); 
      FileInfo fi = new FileInfo(ListViewCostumControl.lvnf.Items[ListViewCostumControl.lvnf.SelectedIndices[0]].Text); 
      HighlightPhrase(richTextBox1, myword, Color.Yellow); 
      if (myword == "Form1") 
      { 
       break; 
      } 
     } 
    } 
} 

그리고 난이 브레이크 부품 추가

static void HighlightPhrase(RichTextBox box, string phrase, Color color) 
{ 
    int pos = box.SelectionStart; 
    string s = box.Text; 
    for (int ix = 0; ;) 
    { 
     int jx = s.IndexOf(phrase, ix, StringComparison.CurrentCultureIgnoreCase); 
     if (jx < 0) { break; } 
     box.SelectionStart = jx; 
     box.SelectionLength = phrase.Length; 
     box.SelectionColor = color; 
     ix = jx + 1; 
    } 
    box.SelectionStart = pos; 
    box.SelectionLength = 0; 
} 

:을 Form1로하여 RichTextBox에있는 모든 장소를 착색한다 일하고

if (myword == "Form1") 
{ 
    break; 
} 

합니다. 하지만이 중단 부분을 제거하면 문자열 배열 변수 테스트에서 텍스트가 존재하는 richTextBox의 모든 위치에 색을 표시해야합니다. Form1을 Form2를, 하이, 44

을하지만 아무 것도 색칠하지 아니에요 : 테스트에서

내가있다. 당신이 if (myword == "Form1") break; 부분을 제거하면

+1

'richTextBox1.Text = File.ReadAllText (..'이 항상 모든 텍스트를 대체 할 ?? 보자 몇 가지 가정을 만들기

, 나는 당신의 코드를 변경할 것 그 규칙을 잘 알고 있는지 확인하기 위해서 : : 포맷 된 텍스트의 Text 속성을 수정하지 마라 !! 텍스트가 포맷 될 때 항상 특별한 명령을 사용하라 : SelectedText = .., AppendText (.. and 붙여 넣기 (.. – TaW

+0

@TaW Working. 루프를 실행하면 ReadAllText가 작업을 수행했습니다. 감사합니다. –

답변

1

은 코드를 꽤 많이됩니다 : 테스트 문자열을 Form1, Form2를, 안녕하세요, (44)이기 때문에

foreach (string myword in test) 
      { 
       richTextBox1.Text = ......; 
       HighlightPhrase(richTextBox1, myword, Color.Yellow);      
      } 

귀하의 경우, 그것은이되는 :

richTextBox1.Text = ......; 
HighlightPhrase(richTextBox1, "Form1", Color.Yellow); 
richTextBox1.Text = ......; 
HighlightPhrase(richTextBox1, "form2", Color.Yellow); 
richTextBox1.Text = ......; 
HighlightPhrase(richTextBox1, "hi", Color.Yellow); 
richTextBox1.Text = ......; 
HighlightPhrase(richTextBox1, "44", Color.Yellow); 

보시다시피 text 속성이 계속 변경되므로 서식이 재설정되거나 경우에 따라 전체 문자열에 적용됩니다. . 당신이 그렇게 할 이유

if (ListViewCostumControl.lvnf.SelectedItems.Count > 0) 
     { 
      var selectedText = ListViewCostumControl.lvnf.Items[ListViewCostumControl.lvnf.SelectedIndices[0]].Text; 
      richTextBox1.Text = File.ReadAllText(selectedText); 
      FileInfo fi = new FileInfo(selectedText); //not used! 

      string word = textBox1.Text; 
      string[] test = word.Split(','); 
      foreach (string myword in test) 
      {      
       HighlightPhrase(richTextBox1, myword, Color.Yellow); 
      } 
      } 
관련 문제