2012-02-16 9 views
1

私はwinフォームアプリケーションでリッチテキストボックスを使用しています。私は、perticularテキストを探して、選択されたテキストを強調表示しています。私は文字列 "he_llo"を探しているので、 "he_llo"が強調表示されているとします。私はそれを「こんにちは」に修正しています。私は、ボタンclick.Hfでハイライト機能を呼び出すときに、文字列は、こんにちはに修正され、その時ハイライトしてはいけません。しかし、それは強調しています。richtextboxをリフレッシュする

private void btnValidate_Click(object sender, EventArgs e) 
     { 
      Validate(); 

     } 

公共ボイド検証(){ 列[]の単語; オブジェクト[] items = chklbErrorlist.CheckedItems.OfType()。ToArray();

for (int i = 0; i < errorList.Count; i++) 
    { 
     //errorList.Add(items[i]); 
     if (rtbFileDisplay.Text.IndexOf((errorList[i].ToString())) != -1) 
     { 
      wordToFind = errorList[i].ToString(); 
      index = rtbFileDisplay.Text.IndexOf(wordToFind); 
      lstErrorList.Items.Add(index.ToString()); 
      while (index != -1) 
      { 
       rtbFileDisplay.Select(index, wordToFind.Length); 
       rtbFileDisplay.SelectionBackColor = Color.Red; 
       index = rtbFileDisplay.Text.IndexOf(wordToFind, index + wordToFind.Length); 
       lstErrorList.Items.Add(index.ToString()); 
      } 

     } 
    } 

    #region "Special Char" 
    foreach (string exp in RegularExpSpChar) 
    { 
     int pos = 0; 

     char ch = exp[1]; 
     words = null; 
     words = rtbFileDisplay.Text.Split(ch); 

     pos = words[0].Length; 

     Regex myregex; 
     if (ch.Equals('.')) 
     { 
      string expr = @"^\.+[a-zA-Z]"; 
      myregex = new Regex(expr); 
     } 
     else 
     { 

      myregex = new Regex(exp); 
     } 

     for (int index = 1; index < words.Length; index++) 
     { 
      string line = ch + words[index]; 
      bool isexist = myregex.IsMatch(line); 
      if (isexist) 
      { 
       rtbFileDisplay.Select(pos, 1); 
       rtbFileDisplay.SelectionBackColor = Color.Red; 
      } 
      else 
      { 
       rtbFileDisplay.Select(pos, 1); 
       rtbFileDisplay.SelectionBackColor = Color.White; 
      } 
      pos = pos + line.Length; 
     } 
    } 
    #endregion 
    #region "Special" 
    foreach (string exp in RegularExpSpecial) 
    { 

     int pos = 0; 
     char ch = exp[2]; 
     words = null; 
     switch (ch) 
     { 
      case 'i': tagtype = "</i>"; 
       highlightlen = 5; 
       break; 
      case 'b': tagtype = "</b>"; 
       highlightlen = 5; 
       break; 
      case 's': 
       if(exp[3] == 'u' && exp[4] == 'p') 
       { 
        tagtype = "</sup>"; 
        highlightlen = 7; 
       } 
       else if (exp[5] == 'n') 
       { 
        tagtype = "</span>"; 
        highlightlen = 8; 
       } 
       break; 
      case '8': 
       if(exp[1] == '#' && exp[4] == '2' && exp[5] == '1') 
       { 
        tagtype = "&#8221;"; 
        highlightlen = 8; 
       } 

       else if (exp[1] == '#' && exp[4] == '1' && exp[5] == '1') 
       { 
        tagtype = "&#8217;"; 
        highlightlen = 8; 
       } 
       break; 
      default: break; 
     } 


     words = Regex.Split(rtbFileDisplay.Text, tagtype); 

     pos = words[0].Length; 

     Regex myregex; 
     myregex = new Regex(exp); 

     for (int index = 1; index < words.Length; index++) 
     { 
      string line = tagtype + words[index]; 
      bool isexist = myregex.IsMatch(line); 
      if (isexist) 
      { 
       rtbFileDisplay.Select(pos,highlightlen); 
       rtbFileDisplay.SelectionBackColor = Color.Red; 

      } 
      pos = pos + line.Length; 
     } 
    } 
    #endregion 

ここで、posはhe_lloのインデックスで、highlightenはhe_lloの長さです。

+0

私はこの問題を理解していません。ハイライトして強調表示しています。 –

+0

私はハッピーテキストを探しています。それはハイライト。私はそれを地獄に変えた。その時、それは強調表示されず強調表示されます。 –

+0

私はindexofメソッドを使用しています。編集後にテキストボックスが更新されない –

答えて

1

すべてのテキストをハイライト表示して、selectionbackcolorを白に設定するだけでよいでしょう。