En lugar de la matriz, debe usar una lista. Creo que cuando la creación se hace algo como esto:
List<button> buttons = new List<button>();
for(int i = 0; i < 20; i++){
Button b = new Button();
...
this.Controls.Add(button);
buttons.Add(button);
}
Luego de quitar cualquier botón de la aplicación de nuevo, basta con hacer:
this.Controls.Remove(buttons[i]);
buttons.RemoveAt(i);
Con esta configuración, para eliminar los últimos 15 botones, trato lo siguiente:
for(int i = 19; i > 4; i--){
this.Controls.Remove(buttons[i]);
buttons.RemoveAt(i);
Recuerde dejar que el inicio del bucle en el artículo 20, y trabajar hacia abajo, porque si se elimina un elemento dentro de una lista, que significa que todos los elementos con un índice superior obtendrán º Índice EIR cambió por 1.