2014-03-19 1 views
2

richtextbox 텍스트의 마지막 '{'과 '}'사이에있는 텍스트를 선택하고 싶습니다. 다음 코드가 있지만 "LastIndexOf"함수에 오류가있어서이를 수정하는 방법을 모르겠습니다. 누군가 나에게 도움을 줄 수 있습니까?C#의 리치 텍스트 상자에서 텍스트 선택

private void highlightText() 
    { 
     mRtbxOperations.SelectionStart = mRtbxOperations.Text.LastIndexOf(@"{", 1, mRtbxOperations.SelectionStart); 
     mRtbxOperations.SelectionLength = mRtbxOperations.Text.IndexOf(@"}", mRtbxOperations.SelectionStart, mRtbxOperations.Text.Length - 1); 
     mRtbxOperations.SelectionBackColor = Color.LightBlue; 
     mRtbxOperations.SelectionFont = new Font(mRtbxOperations.SelectionFont, FontStyle.Underline); 
     mRtbxOperations.SelectionLength = 0; 
    } 

lastIndexOf에서도 오류 :

The count must be positive and must refer to a location within the string, array or collection. Parameter name: count

+0

가능한 중복 (http://stackoverflow.com/questions/455713/selectively-coloring-text-in-richtextbox) –

답변

1

다음과 같이

난 당신의 코드를 다시 작성할 것 .

int textStart = mRtbxOperations.Text.LastIndexOf(@"{", 
               mRtbxOperations.SelectionStart); 
if (textStart > -1) { 
    int textEnd = mRtbxOperations.Text.IndexOf(@"}", textStart); 
    if (textEnd > -1) { 
    mRtbxOperations.Select(textStart, textEnd - textStart + 1); 
    mRtbxOperations.SelectionBackColor = Color.LightBlue; 
    } 
} 
[선택적하여 RichTextBox에 텍스트를 착색]의
+0

이 작동하지만, lastIndexOf 내 '{'마우스를 텍스트 근처에서 클릭 근처에 수신 싶습니다. 내 말은 ... 내 richedTextBox를 클릭하고 "m", "m", " 0,/* mouseClickPosition * /); " 그리고 같은 오류로 다시 깨졌습니다. – Imrik

+0

@Imrik 그렇다면 LastIndexOf를 원하지 않는다고 생각합니다. – LarsTech

+0

내 텍스트가 다음과 같으므로 LastIndexOf가 필요합니다. "if (valueGenMaxProp! = 0) {myPaint();} if (int() firstLap == true) {pbxTriangle.Location = new Point (200, 100);} "첫 번째 또는 두 번째 세그먼트에 밑줄을 긋는 것은 mouseClick 위치 인"mRtbxOperations.SelectionStart "에 따라 다릅니다. 감사! – Imrik

1

는 텍스트 범위를 벗어 얻고있는 것으로 보인다. 하위 문자열이나 인덱스를 가져올 때는 항상 문자열 경계 또는 하위 문자열 경계를 사용해야합니다. 또한 선택이 유효한지 확인해야합니다. 당신 lastIndexOf에서도 매개 변수는 적절한 길이를 얻기 위해 시작 지점을 빼줄 필요가 선택의 길이,뿐만 아니라, 엉망이되어

private void highlightText() 
    { 
     Selection selection = GetSelection(mRtbxOperations.Text); 
     if (selection == null) 
      return; 
     mRtbxOperations.SelectionStart = selection.Start; 
     mRtbxOperations.SelectionLength = selection.Length; 
     mRtbxOperations.SelectionBackColor = Color.LightBlue; 
     mRtbxOperations.SelectionFont = new Font(mRtbxOperations.SelectionFont, 
      FontStyle.Underline); 
    } 

    private static Selection GetSelection(string text) 
    { 
     int sIndex = text.LastIndexOf(@"{"); 
     if (sIndex == -1) 
      return null; 
     int eIndex = text.IndexOf(@"}", sIndex); 
     if (eIndex == -1) 
      return null; 

     return new Selection(sIndex + 1, eIndex); 
    } 

    public class Selection 
    { 
     public int Start { get; set; } 
     public int End { get; set; } 

     public int Length 
     { 
      get 
      { 
       return End - Start; 
      } 
     } 

     public Selection(int startIndex, int endIndex) 
     { 
      this.Start = startIndex; 
      this.End = endIndex; 
     } 
    } 
+0

I :

은 간단한 버전을 사용해보십시오 다른 솔루션에서와 동일한 문제가 있지만, lastIndexOf 내 '{'를 마우스로 클릭하면 텍스트가 표시됩니다. 내 말은 ... 내 richedTextBox를 클릭하고 "m", "m", " 0,/* mouseClickPosition * /); " 그리고 같은 오류로 다시 깨졌습니다. 감사! – Imrik

+0

확인. 이해 했어. LastIndexOf를 사용하여 편집 내용을 확인하십시오. 그것은 작동해야합니다. –

+0

그것도 작동, 감사합니다! :) – Imrik