У меня есть обработчик, использующий событие keyDown WinForms RTB, который имеет следующий код:
GetTextAtLoc(RTB->SelectionStart); // selects some text at the caret's position
RTB->SelectedText = "SomeOfMyOwn";
GetTextAtLoc(RTB->SelectionStart); // selects the replacement string
RTB->SelectionStart += RTB->SelectionLength - 1;
Хотя этот код, кажется, выполняет свою работу (свойства SelectionStart / Length обновляются правильно), каретка не перемещается в конец новой строки - она говорит, где она была во время первого вызова GetTextAtLoc. Перерисовка текстового поля также не оказывает никакого влияния.