This article will describe two things:
How to check previous instance of a C# windows application.
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
private static bool getPrevInstance()
//get the name of current process, i,e the process
//name of this current application
string currPrsName = Process.GetCurrentProcess()
//Get the name of all processes having the
//same name as this process name
//if more than one process is running return true.
//which means already previous instance of the application
if (allProcessWithThisName.Length > 1)
return true; // Yes Previous Instance Exist
return false; //No Prev Instance Running
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;
notifyIcon1.Visible = true;
notifyIcon1.BalloonTipTitle = " Project Tracker Suite (PTS) ";
notifyIcon1.BalloonTipText = " PTS: Modules ";
//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)
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.
formSetToMdi = true;
if (i == 0 || formSetToMdi == false)
// if the given form not found as mdi child return false.
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.