richtextbox.Find OutOfRange - PullRequest
       90

richtextbox.Find OutOfRange

0 голосов
/ 05 августа 2020

мое программное обеспечение заменяет некоторые заполнители в richtextbox (Forms) изображениями.

чтобы найти его, я использую функцию richtextbox.Find (String). Это работает.

if (obj.GetType() == typeof(Datenblock_Mitte_Bild))
                {
                    
                    int startsel = raw_rtf.Find("[[$Bild_" + ((Datenblock_Mitte_Bild)obj).int_id + "]]");
                   

                    raw_rtf.SelectionStart = startsel;
                    raw_rtf.SelectionLength = ("[[$Bild_" + ((Datenblock_Mitte_Bild)obj).int_id + "]]").Length;
               ...}

но, если заполнитель является последним текстом в richtextbox, И я ранее заменил другой заполнитель изображением (внутри таблицы), я получаю параметр «System.ArgumentOutOfRangeException»: длина в строке «raw_rtf.Find (...)», если 4 или более символов после последнего заполнителя, все работает нормально.

Не работает: «test test [[$ Bild_test1]] и pic2 [[$ Bild_test2 ]] "

работает:" test test [[$ Bild_test1]] и pic2 [[$ Bild_test2]] abcd "

EDIT: для каждого изображения до этого должно быть 4 символа, поэтому, если" [[$ Bild_test1]] "состоит из 2 изображений, это должно быть 8 символов, 3 изображения -> 12 символов ...

Похоже, что функция FIND не может определить правильную длину rtf. Stracktrace показывает, что ошибка находится в параметре длины подстроки.

StackTrace "bei System.String.Substring (Int32 startIndex, Int32 length) \ r \ n bei System. Windows .Forms.RichTextBox .Find (String str, Int32 start, Int32 end, RichTextBoxFinds параметры) \ r \ n в системе. Windows .Forms.RichTextBox.Find (String str)

...