Before I respond to your question with
code, I'd like to ask you if you are aware of, or have used, the special 'MdiWindowListItem property of the MenuStrip that causes the Mdi App to automatically keep track of all open Mdi Child-Forms, and brings-to-front whichever Child-Form is mapped to the sub-item you clicked on ?
If you are not familiar with this, see: [
^].
That may not have the functionality you want; it may/may-not be easily modified to have the functionality you want.
It would be helpful if you described what you want in contrast with what that "automatic" window management facility provides.
Other information I think is essential to know:
1. will you ever create
more than one instance of any of your types of Child-Forms.
2. once an instance of one type of Child-Form is created, do you allow the user to 'Close it, rather than just 'Hide it ?
3. do you always create at least one instance of each type of Child-Form ?
This "jumps out at me" in your code (second example):
1. in 'OpenForm you are setting the MdiParent property of the instance of the Child-Form passed as a parameter whether or not the parameter is 'null or is an existing instance: if it's an existing instance, then you don't need to set its 'MdiParent property again, and you can just make it visible using aForm.Visible = true;