How to Prevent Multiple Instances of Child Form in MDI Windows Form Application

Posted by Kirtan Patel Articles | How do I April 12, 2010
This article shows you how to prevent multiple instances of child form in MDI windows Form application.
Reader Level:


This is common problem for beginners while working with MDI form. Multiple instances of the form will open when we try to open it with Form.Show() method. 

This article will show how to overcome with this problem.


CSharp 2.20/3.5


For preventing multiple instances of child form we can use ShowDialog() method. But it will be problematic to user because if user wants to work with many windows at a time he can not because he need to close opened window if he opened it with ShowDialog() method.

So lets implement some code that will open new window, if there is no child window opened before. And if its opened previously then application will just focus that window and will not create any new child windows.
private void button1_Click(object sender, EventArgs e)
    bool IsOpen = false;
    foreach (Form f in Application.OpenForms)
        if (f.Text == "Form2")
            IsOpen = true;
    if (IsOpen == false)
        Form2 f2 = new Form2();
        f2.MdiParent = this;

Understanding the code

Here we have declared one variable that is used as flag for the child window is already opened or not? This flag will store the status of child form :)

Now we iterate through each opened form in our application and check if any form with Form2 is already opened or not. If it is found, then we set flag to true and focus() that already opened form and break the loop.

Now we are checking status of flag. If application sees that flag is still false after iterating then it will create a new instance of that child window :)

That's it you are done !


We have just see in this article how to prevent multiple instances of child form in MDI windows Form application.

Article Extensions
Contents added by Jiten on Jun 02, 2010
Hi Kirtan,
Thanks for putting the code snippet here. It saved me some time on researching.
But I feel, using the name property of form instead of text is a a better solution.
if (f.Text == "Form2") --> if (f.Name == "Form2")

Thanks again. :)


Trending up