Me parece que en el caso de los formularios no conviene utilizar singleton (el patrón que muestra mvazquez). Porque cuando cierres el form vas a mantener la misma instancia al reabrirlo.
Sí no me equivoco estas buscando que el usuario no pueda abrir dos veces el mismo form. Tengo un ejemplo de una app en donde gestiono eso:
Código:
if (usuariosToolStripMenuItem.Checked)
_frmUsuarios.Close();
else
{
_frmUsuarios = new FrmUsuarios(Manager);
_frmUsuarios.FormClosed += new FormClosedEventHandler(frmUsuarios_FormClosed);
_frmUsuarios.MdiParent = this;
_frmUsuarios.Show();
}
usuariosToolStripMenuItem.Checked = !usuariosToolStripMenuItem.Checked;
El formulario principal tiene la instancia de _frmUsuarios, al hacer click sobre la opción del menú lo tildo, y en base a eso controlo si el usuario lo lanza solo una vez.
Te paso el link para que veas como funca:
http://www.orientadoanet.com/2011/08/c-programa-de-chat.html