Проблема в том, что вы зацикливаетесь до индекса == -1
while ((index != -1));
, затем немедленно используйте этот индекс
int lineNum = textBoxItems.GetLineFromCharIndex(index);
Я не совсем уверен, какова логика цикла while, но на первый взгляд вы можете выйти из него, если index == -1. Или следите за последним неотрицательным индексом вне цикла.
Обновление
Чтобы найти элемент, по которому пользователь только что щелкнул, вам нужно изменить цикл, чтобы записать последний индекс, который не равен -1. Цель цикла while - найти последнее вхождение s, но вы должны записать последнее допустимое вхождение в отдельной переменной (lastIndex в приведенном ниже коде) Вы также должны проверить, что что-то действительно было найдено после завершения цикла.
Вот как я мог бы реализовать эту логику:
int lastIndex = -1;
//get line number of item
do
{
index = textBoxItems.Find(s, index + 1, RichTextBoxFinds.MatchCase);
if (index != -1) {
lastIndex = index;
}
} while ((index != -1));
if (lastIndex !+ -1) {
int lineNum = textBoxItems.GetLineFromCharIndex(lastIndex);
//messageBox.Show(""+lineNum);
textBoxCount.Text.Remove(lastIndex, 3);
textBoxCount.Text.Insert(lastIndex, "(" + mainItems[itemID] + ")");
}