To prevent opening of a duplicate, you must first know what is open. I'm not sure about the reflective lookup but let's leave that for now, and register windows when you open them:
private void CallWindow(string myForm )
{
Type type = Type.GetType("ServiceManagementSystem." + myForm);
Form c;
if(!openForms.TryGetValue(type, out c) || c.IsDisposed){
openForms[type] = c = Activator.CreateInstance(type) as Form;
}
c.Show();
}
private Dictionary<Type, Form> openForms = new Dictionary<Type, Form>();