Я бы создал usercontrol, содержащий flowlayout-control. Элемент управления потоком данных автоматически изменит размер до размера пользовательских элементов управления.
При запуске управление потоком будет содержать одно текстовое поле без каких-либо видимых границ.
Пользователь вводит текст, и для каждого нажатия клавиши вы пытаетесь разрешить слово.
Если оно разрешается как слово, то добавьте метку перед текстовым полем, метка будет иметь разрешенное слово как текст, а его шрифт будет подчеркнут. И текстовое поле теперь очищено для новой записи.
Если пользователь нажимает клавишу «Backspace» или «Влево» в пустом текстовом поле, выберите предыдущий элемент управления в Flowlayout и сделайте шрифт этого ярлыка полужирным и подождите (удалить, чтобы удалить слово или стрелку влево и вправо для перехода к другому слову или пустому текстовому полю).
Стоя на разрешенном слове: если нажать влево, переместите текстовое поле так, чтобы оно было слева от разрешенного слова. При нажатии вправо переместите текстовое поле справа от разрешенного слова. Двойной щелчок по метке удаляет метку и активирует текстовое поле с текстом, готовым для редактирования.
Работая с метками (= разрешенные слова) и текстовым полем для ввода новых слов, довольно легко эмулировать поле To в email-программах. Единственное, что является «сложным», - это позволить пользователю выбрать несколько слов и удалить их, но есть много решений (google + flowlayoutcontrol + множественный + выбор). Кроме того, можно также выполнить автозаполнение в текстовом поле, чтобы «разрешить» известный список слов.
У меня есть пользовательский контроль на одном из моих компьютеров, я позабочусь о нем сегодня. Если я найду его, я загружу источник и обновлю ответ ссылкой на zip-файл.
Edit:
Не нашел программу, поэтому я потратил 30 минут, переписывая ее с нуля, используя (flowlayoutcontrol, label, textbox) в качестве пользовательского контроля
Фильм об этом в прямом эфире: http://www.youtube.com/watch?v=1MJ7bmFcCmE
Конечно, этот 30-минутный хак не идеален. Некоторые навигационные вещи оставлены для реализации. Может быть, я исправлю это сегодня вечером. Если кто-то улучшит этот пример кода, пожалуйста, опубликуйте его в этой теме, чтобы все могли его использовать.
Вот исходный код для этого примера:
http://www.filefactory.com/file/cda1d84/n/testproj.zip