Как насчет:
int y = 10;
foreach (string name in names)
{
Button button = new Button();
button.Text = name;
button.Position = new Point(10, y);
y += 20;
button.Click += HandleButtonClick;
Controls.Add(button);
}
Вы также можете хранить кнопки в массиве или списке ... нет ничего особенного в графических элементах управления, которые мешают вам создавать их во время выполнения, как и любой другой объект.
Если это не поможет, пожалуйста, дайте больше информации о том, что вам нужно сделать, что вышеизложенное не поможет вам.