TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
Monte
NA
24
8.6k
Problem with Closed Event of a Child form
Jun 14 2011 2:28 PM
I have an application which has a Parent form that can open multiple instances of a child form. I have used an arraylist to know how many child forms are open. My problem is that if the first child form opened is not the last one to be closed, the closed event does not always fire for that child form.
If the first child form to be opened is the last one to be closed then the closed event fires every time.
I know how many forms are open by using a counter = "childFormOpenCount" - for commissioning purposes I am displaying this number in a messagebox every 10 seconds. I also display a messagebox "Closing Mimic" whenever the childform closed event is fired - as in the code below.
I know the Close event has not fired by the messagebox "Closing Mimic" not being displayed and the childFormOpenCount not being decremented.
To close the child form I have tried using the "X" at the top of the Child Form (now disabled in the project) and an "Exit" button that I added with a click event containing the code:
this.Close();
Both methods of closing the child Form give the same problem results.
I am using Visual Studio 2003 (not possible to use a later version).
I have pasted the relevant sections of code (maybe in a reply to this post as I think otherwise too long) and uploaded the project.
Thanks in advance for any help...
#region Method CreateNewMimic
private void CreateNewMimic()
{
try
{
//Create new instance of Mimic form along with the fields that are fixed and //wont change
//NB only need Channel ID, Name & channel number as these will not change
this.ChildMimicForm = new MimicForm(mimicFormAnalogueChannelID,mimicFormAnalogueName,mimicFormAnalogueChannelNumInt,mimicFormAnalogueUnits);
//Add an event handler in Parent form when this new Child form is closed
this.ChildMimicForm.Closed += new System.EventHandler(this.ChildMimicForm_Closed);
//Append this MimicForm to arraylist of Forms for storage
childMimicFormArrayList.Add(this.ChildMimicForm);
//Increment Counter for number of Child forms open
childFormOpenCount ++;
//Increment Form Array index ready for the next MimicForm to be opened & then //stored
childMimicFormArrayListIndex ++;
//Append this current Channel Number (entered for this Form) into array of //integers
childMimicFormChannelNumArrayList.Add(mimicFormChannelNumWithOffset);
//Increment Channel Number Array index ready for the next MimicForm Channel //number to be entered & then stored
childMimicFormChannelNumArrayListIndex ++;
//Open ChildForm
this.ChildMimicForm.Show();
}
catch (Exception e)
{
MessageBox.Show("Error in Method 'CreateNewMimic:' " + e.Message);
}
}
#endregion
#region Event handler when Child Mimic Form Closed
private void ChildMimicForm_Closed(object sender, EventArgs e)
{
//This childform event was created manually above when this version of childform //was opened
//Decrement Counter for number of Child forms open
childFormOpenCount --;
MimicForm ChildMimicForm = (MimicForm)sender;
//Message for commissioning use
MessageBox.Show("Closing Mimic","Commissioning");
//Remove event handler for this version of Child Form
this.ChildMimicForm.Closed -= new System.EventHandler(this.ChildMimicForm_Closed);
//Remove this version of Child Form from Array List - to save resources
childMimicFormArrayList.Remove(ChildMimicForm);
}
#endregion
Attachment:
imacsinterfacetest 140611.rar
Reply
Answers (
6
)
Same code, but differ output.
get the monitor size