C # No Desecha los controles como dije.

Tengo un panel de control. Y dentro del panel, los usuarios pueden agregar combobox, etiquetas de cuadro de texto, etc., arrastrarlos y demás, y hay un botón Eliminar en mi formulario donde, si hacen clic, eliminará todos los controles dentro de ese panel. PERO este código:

foreach( Control control in panel.Controls )
{
     control.Dispose();
}

... No funciona correctamente. No siempre dispone de TODOS los controles dentro del panel. A veces se deshace de la mayoría de ellos, a veces solo se deshace de uno o dos. A veces todos, menos 1, están dispuestos. WTF?

EDITAR:

Aquí está el código que utilizo para agregar los controles al Panel:

button1_Click(object sender, EventArgs e)
{
    TextBox tbox = new TextBox();
    tbox.Multiline = true;
    tbox.IsAccessible = true;

    panel.Controls.Add(tbox);
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta