ARTICLE

Checking previous instance (single instance) of an C# windows application, also setting MDI child form to a MDI parent

Posted by Rehan Ahmad Abbasi Articles | Visual C# September 04, 2008
In this article I will describe how to check previous instance (single instance) of an C# windows application and also whether a MDI child is set to a MDI parent
Reader Level:

Introduction

This article will describe two things:

  1. How to check previous instance of a C# windows application.

  2. How to check that whether a MDI child is set to a mdiparent, and if it is already loaded then just activate it instead of creating a new instance and setting it as MDI child.

This code is written in C#. This article will especially help those who were VB 6.0 programmer and recently shifted to .NET.

Check the Previous Instance of a Windows Application 

using System.Diagnostics;

 

      private static bool getPrevInstance()

        {

            //get the name of current process, i,e the process

            //name of this current application

 

            string currPrsName = Process.GetCurrentProcess()

                              .ProcessName;

 

            //Get the name of all processes having the

            //same name as this process name

            Process[] allProcessWithThisName

                         = Process.GetProcessesByName(currPrsName);

 

            //if more than one process is running return true.

            //which means already previous instance of the application

            //is running

            if (allProcessWithThisName.Length > 1)

            {

                MessageBox.Show("Already Running");

                return true; // Yes Previous Instance Exist

            }

            else

            {

                return false; //No Prev Instance Running

            }

        }

 

NOTE:

Instead of the above method of checking by process name  we can also use mutex,but this method is easy as compared to the mutex which requires a knowledge of threading.

This method will work fine unless and untill you change the process name.



Check Whether a MDI Child is Set to a mdiparent

 

The below code will check that whether a MDI child is set to a mdi parent and if it is already loaded and a MDI child. Then just activate it instead of creating a new instance and setting it as MDI child.

 

Suppose I have a windows form named as frmModule and I want to set it as a mdi child to MDI Form. I am calling function ActivateThisChill() with the name of the form as a parameter to this function.

 

        {

          if (ActivateThisChild("frmModule") == false)

                {

                frmModule newMDIChild = new frmModule();

                newMDIChild.Text = "Module";

                newMDIChild.MdiParent = this;

                newMDIChild.Show();

                }

            notifyIcon1.Visible = true;

            notifyIcon1.BalloonTipTitle = " Project Tracker Suite (PTS) ";

            notifyIcon1.BalloonTipText = " PTS: Modules ";

            notifyIcon1.ShowBalloonTip(2000);

 

           }

 

 

      //This function will return true or false.

      //false means this form was not previously set

      //as mdi child hence needs to creat a instance

      //and set it as a mdi child.

     private Boolean ActivateThisChild(String formName)

        {

            int i;

            Boolean formSetToMdi = false;

            for (i = 0; i < this.MdiChildren.Length; i++) 

             // loop for all the mdi children

            {

                if (this.MdiChildren[i].Name == formName)

                  // find the Mdi child with the same name as your form

                {

                    // if found just activate it.

                    this.MdiChildren[i].Activate();

                    formSetToMdi = true;

                }

            }

 

            if (i == 0 || formSetToMdi == false)

                // if the given form not found as mdi child return false.

                return false;

 

            else

                return true;

 

        }

 

Note:

The other way around is to use static property in your each form and check in your MDI parent that whether the static property of that particular form is assigned a value or not and then take your actions accordingly.

COMMENT USING