ALERT!
Click here to register with a few steps and explore all our cool stuff we have to offer!
Home
Upgrade
Credits
Help
Search
Awards
Achievements
 4093

C# Allow only 1 instance of a form to be opened

by 1UP - 10-10-2016 - 11:25 PM
#1
This was a problem I ran into with using MDI parents /children forms. You could open the same form over and over and it soon became a mess. The code below will check to see if it already exists and if it doesn't assign the new form as a child to the mdi parent form and open it.

Code:
//Code that handles Child forms. May be adding more code to this down the road for customization.
        //No need to write the same code for every form
        private void CreateMDIChild(Form childForm)
        {
            //Checks if child form already exists. Only open if it does not exist in the collection
            FormCollection allForms = Application.OpenForms;
            bool formOpened = false; //Assume that this form does not already exist

            foreach (Form frm in allForms)
            {
                if (frm.Name == childForm.Name)
                {
                    //Tried to open form here however it throws an error about the collection being modified. So we create a bool and if the form exists
                    //set it to true
                    formOpened = true;
                }
            }
            //As long as formOpened is false we can open the new form as a child form to the parent
            if (formOpened == false)
            {
                childForm.MdiParent = this;
                childForm.Show();
            }
        }

Using the method

Code:
private void loginRegisterToolStripMenuItem_Click(object sender, EventArgs e)
        {    
            CreateMDIChild(new frm_LoginRegister());
        }
Reply
#2
(10-10-2016 - 11:25 PM)1UP Wrote: This was a problem I ran into with using MDI parents /children forms. You could open the same form over and over and it soon became a mess. The code below will check to see if it already exists and if it doesn't assign the new form as a child to the mdi parent form and open it.

Code:
      //Code that handles Child forms. May be adding more code to this down the road for customization.
       //No need to write the same code for every form
       private void CreateMDIChild(Form childForm)
       {
           //Checks if child form already exists. Only open if it does not exist in the collection
           FormCollection allForms = Application.OpenForms;
           bool formOpened = false; //Assume that this form does not already exist

           foreach (Form frm in allForms)
           {
               if (frm.Name == childForm.Name)
               {
                   //Tried to open form here however it throws an error about the collection being modified. So we create a bool and if the form exists
                   //set it to true
                   formOpened = true;
               }
           }
           //As long as formOpened is false we can open the new form as a child form to the parent
           if (formOpened == false)
           {
               childForm.MdiParent = this;
               childForm.Show();
           }
       }

Using the method

Code:
       private void loginRegisterToolStripMenuItem_Click(object sender, EventArgs e)
       {    
           CreateMDIChild(new frm_LoginRegister());
       }

Very nice man, thank you for this. Heart
Are you a guest to this site? Click the image below and sign up today!
[Image: FTYbRmR.gif]
Reply
#3
Oooooo, nice code you got there! :yus:Heart
Jacked by Red @ https://pulses.xyz/
Reply

Users browsing: 3 Guest(s)