Я недавно работаю с C #, и я спрашиваю здесь, потому что я не нашел решение поиска в Google и другие вопросы по SO, я объясню, что делает мой пример приложения:
Когда я запускаю его, он по умолчанию отображает форму с текстовым полем, это текстовое поле всегда будет отображаться, после ввода некоторого текста и нажатия клавиши ввода будет создано новое текстовое поле и новая кнопка (все элементы управления, даже текстовое поле по умолчанию внутри панели), и новые текстовые поля имеют ту же функциональность, что и текстовое поле по умолчанию, когда я нажимаю кнопку, сгенерированную рядом с ее текстовым полем, она удаляет саму кнопку и текстовое поле, но после этого, если я удаляю некоторые случайные текстовые поля, она оставляет пробел между этими элементами управления, как можно реорганизовать этот контент так, чтобы между ними не было места?

Как вы можете видеть на картинке, можете ли вы сказать мне, как можно это исправить, или дать мне совет, как этого добиться? спасибо, кстати, этот метод я использую для генерации кнопок и текстовых полей
private void GenerarTextBox()
{
panelContenedor.VerticalScroll.Value = panelContenedor.VerticalScroll.Minimum;
TextBox tb = new TextBox();
tb.Text = "Prueba " + id;
tb.Name = "txtBox" + id;
tb.KeyDown += new KeyEventHandler(TextBox_Keydown);
Button bt = new Button();
bt.Cursor = Cursors.Hand;
bt.Text = "X";
bt.Name = "btnPrueba" + id;
bt.Click += new EventHandler(ClickBotones);
Point p = new Point(20, 30 * id);
Point pb = new Point(130, 30 * id);
tb.Location = p;
bt.Location = pb;
panelContenedor.Controls.Add(tb);
panelContenedor.Controls.Add(bt);
tb.Focus();
id++;
}
А это для удаления текстовых полей и кнопок
private void ClickBotones(object sender, EventArgs e)
{
Button bt = sender as Button;
string nombreBoton = bt.Name;
string idBoton = nombreBoton.Substring(9);
string nombreTextBox = "txtBox" + idBoton;
foreach (Control item in panelContenedor.Controls.OfType<Control>())
{
if (item.Name == nombreTextBox)
{
panelContenedor.Controls.Remove(item);
panelContenedor.Controls.Remove(bt);
}
}
}