Hola,
Tal vez por ignorancia que a mí no se me ocurre ahora mismo sino lo típico, supongo: declarar una variable "global" dentro de la clase del "Form1", que mantenga una referencia a cierto objeto "Form2". Cuando se precise mostrar el formulario "Form2" se mirará si dicha variable es "null", y, en caso de que lo sea crear y mostrar el formulario "Form2", y, en caso de que no lo sea (lo cual nos indicará que el objeto ya ha sido creado, obviamente) levantar una excepción o simplemente darle el "foco" al formulario "Form2" previamente creado.
Es mucho más sencillo de ver con algo de código:
Código:
namespace WindowsApplication1
{
public partial class Form1 : Form
{
// Variable "global" en que guardar una
// referencia a un objeto de tipo "Form2"
public Form2 form2 = null;
// Constructor de "Form1"
public Form1()
{
InitializeComponent();
}
// Evento "Click" de un botón en "Form1"
private void button1_Click(object sender, EventArgs e)
{
if (form2 == null) // ¿"form2" es aún "null"?
{
form2 = new Form2(); // Creamos un objeto "Form2"
form2.MdiParent = this; // Lo emparentamos ;-)
form2.Show(); // Y lo mostramos
}
else // ¿"form2" ya tiene una referencia válida?
{
form2.Focus(); // Damos el foco al formulario "Form2"
//throw new Exception("Ya existe el formulario");
}
}
}
}