2014-12-02 1 views
0

현재 긴 문자열을 표시하는 데 사용하는 서식있는 텍스트 상자가 있습니다. 다음 코드를 사용하여 문자열 내의 '중요'항목 목록을 굵은 글꼴로 선택합니다.richtextbox.find 중복 텍스트 선택

foreach (string item in selectionList) 
{ 
    if (item.Length != 0) 
    { 
      int charStart = richTextBox.Find(item); 
      richTextBox.SelectionFont = selectedFont; 
      richTextBox.Select(charStart, item.Length); 
    } 
} 

중복 된 항목을 텍스트에 표시하는 경우 가장 효율적인 방법을 알고 싶습니다. 예. (이 예제에서는 대문자로 강조 표시 할 텍스트) "BURGERS, CHIPS 및 CHIP을 주문하고 싶습니다."

이것은 단지 예제 데이터로, 사용하고있는 데이터에 몇 가지 중복이 있으므로 가능해야합니다. 이 상황을 처리합니다. (이이 같은 쿼리입니다 : duplicate selection in text() XPath selector하지만 C#에서)

가 현재 항목이 selectionList에 두 번 표시하지만 내 코드 만하여 RichTextBox에서 단어의 첫 번째 인스턴스를 찾아 마지막 인스턴스가 강조되지 않습니다. 저는 VS2013에서 C#과 .net 4.0을 사용하고 있습니다. 반환 될 때까지 -1

덕분에 많이, 아냐

+0

가능한 중복 http://stackoverflow.com/questions/1244428/how-do-i-find-repeated-text-in-a- richtextbox) – MethodMan

+0

그래, 멋지다! 나는 개별 단어보다는 구를 선택해야한다는 것을 제외하고는. 그리고 더 자세히 살펴보면 그 질문은 중복을 찾는 방법을 묻는 것입니다. List 을 사용하여 항목을 보유하고 쉽게 중복을 찾을 수 있습니다. 이제는 텍스트에서 모든 인스턴스를 선택하는 가장 효율적인 방법을 알아야합니다. 그냥 첫 번째. –

+0

그리고 실제로, 선택 목록에 중복이 필요없이 텍스트 상자 안의 각 복제본을 선택할 수 있다는 것이 좋습니다. 예 : SelectionList = (햄버거, 칩) 각 단어의 모든 인스턴스를 자동으로 선택할 수 있으면 좋을 것입니다. –

답변

0

저는 여기에 효율성을 찾고 있습니다. 누구나 더 잘 만들 수 있습니까?

if (item.Length != 0) 
{ 
    if (!richTextBox.SelectedText.Contains(item)) 
    { 
     int charStart = richTextBox.Find(item); 
     richTextBox.SelectionFont = selectedFont; 
     richTextBox.Select(charStart, item.Length); 
    } 
    else 
    { 
     int charStart = richTextBox.Find(item); 
     charStart = richTextBox.Find(item, charStart + item.Length, RichTextBoxFinds.None); 
      richTextBox.SelectionFont = selectedFont; 
      richTextBox.Select(charStart, item.Length); 
     } 
} 
[나는하여 RichTextBox에서 반복되는 텍스트를 어떻게 찾을 수 있습니까?] (의
0

당신은 루프에서() 찾기를 호출합니다. 루프 내의 호출은 마지막으로 찾은 위치에서 시작됩니다. +1 :

 foreach (string item in selectionList) 
     { 
      if (item.Length != 0) 
      { 
       int charStart = richTextBox.Find(item, RichTextBoxFinds.None); 
       while (charStart != -1) 
       { 
        richTextBox.SelectionFont = selectedFont; 
        richTextBox.Select(charStart, item.Length); 
        charStart = richTextBox.Find(item, charStart + 1, RichTextBoxFinds.None); 
       } 
      } 
     } 
+0

올바른 종류의 것처럼 보입니다. 단 하나의 인스턴스 만 찾을 수 있다면이 특정 코드는 무한 루프가됩니다! –

+0

? ... 아니, 단 하나의 인스턴스에서만 제대로 작동합니다. 나는 그것을 시험했다. 더 이상 인스턴스가 발견되지 않으면 Find()에 대한 두 번째 호출은 -1을 반환합니다. 귀하의 구현을 보여주십시오 ... –