Are you asking how to create multiple Forms, and show them, when a Button is clicked on a Main Form ? Why use a Delegate instead of just using a simple for-loop, or step-by-step code, in the Button's Click EventHandler ?
When you create new objects dynamically, you probably need to keep track of them, and if you create them in a loop, in a method, you will need keep a valid reference to them.
Consider you have two types of "secondary" Forms, 'Form2, 'Form3. This example:
private List<Form2> theFormTwos = new List<Form2>();
private List<Form3> theFormThrees = new List<Form3>();
private void ButtonOnMainForm_Click(object sender, EventArgs e)
{
for (int i = 0; i < 2; i++)
{
theFormTwos.Add(new Form2());
}
for (int j = 0; j < 3; j++)
{
theFormThrees.Add(new Form3());
}
}
is storing each created instance of 'Form2 and 'Form3 in a separate List.
Of course, once a Form is shown, then it is accessible in the Application.OpenForms FormCollection, but if you dispose of, or hide (set its 'Visible property to 'false), that Form, it will no longer appear in Application.OpenForms.