Я бы создал пользовательский элемент управления, поместил в него два текстовых поля с именами конструктора KeyTextBox и ValueTextBox, затем в класс пользовательского элемента управления добавил бы два свойства, одно для ключа, а другое для значения.
Теперь предположим, что у вас есть кнопка «Добавить пару ввода текста» в главной форме, а также пустая панель, которая будет содержать ваш список кнопок. В коде для этой кнопки вы просто создаете экземпляр своего KeyValuePairTextBoxControl, а затем добавляете его в коллекцию Controls панели.
Теперь, когда вы хотите создать словарь на основе этих значений, вы просто просматриваете коллекцию элементов управления этой панели, и для каждого KeyValuePairTextBoxControl вы можете получить доступ к его свойствам ключа и значения, чтобы поместить их в словарь.
Вы также можете выставлять измененные текстовые события текстовых полей через свой пользовательский элемент управления, и при создании каждого элемента управления вы подключаете некоторый обработчик для этих событий, чтобы вы могли каждый раз обновлять свой словарь.
Возможно, вы сможете сделать это намного чище с помощью некоторых функций привязки данных, но, как правило, это может быть намного сложнее в зависимости от деталей того, что вы хотите сделать.