У нас была почти та же задача, но она была более сложной - не только TextBoxt, но и ComboBoxes. Решил это, создав UserControl (одна строка, построенная из необходимых нам элементов) и добавляя этот элемент управления каждый раз по запросу пользователя.
Итак, мы создали UserControl в нашем проекте и поместили в него необходимые элементы. Если вы ожидаете, что ваша панель и строки будут значительными, то вам нужно быть очень осторожным с якорями элемента. Убедитесь, что начальная ширина строки и панели одинакова, а также некоторый интервал от левой и правой границ панели (при необходимости).
Каждый раз, когда пользователь нажимает Enter или Button, что угодно, вы должны динамически создавать новый UserControl и размещать его на панели. Хитрость заключается в том, чтобы разместить его прямо под последним существующим рядом. Чтобы сделать это правильно, получите местоположение последней существующей строки (из коллекции Panel.Controls), добавьте высоту строки и некоторый интервал, если необходимо, и установите местоположение новой строки, равное этому числу.