Search code examples
c#richtextboxlastindexof

Select text from a Richtextbox in C#


I want to select the text that is between the last '{' and '}' of a richtextbox text. I have the next code, but I have an error on the "LastIndexOf" function and I don't know how to fix it. Can someone give me some help?

    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 Error:

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


Solution

  • You LastIndexOf parameters are messed up, as well as the Length of the selection, where you need to substract the starting point in order to get the proper length.

    Try a simpler version:

    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;
      }
    }