I have a MainForm and a UserConfigForm and used the pattern from this answer for UserConfigForm i.e.
private static UserConfigForm openForm = null;
public static UserConfigForm GetInstance()
{
if (openForm == null)
{
openForm = new UserConfigForm();
openForm.FormClosed += delegate { openForm = null; };
}
return openForm;
}
Inside UserConfigForm I also have an auto-property UserHasSaved i.e.
public bool UserHasSaved { get; private set; }
Now in the MainForm I need to check if I have to reload the user config when the config form is closed. So in the MainForm I have,
private UserConfigForm userCfgForm;
private void OpenEditFormClick(object sender, EventArgs e)
{
userCfgForm = UserConfigForm.GetInstance();
userCfgForm.FormClosed += ConfigFormClosed;
userCfgForm.Show();
{
private void ConfigFormClosed(object sender, FormClosedEventArgs e)
{
if (userCfgForm.UserHasSaved)
{
MessageBox.Show(message, caption);
//Reload config
}
}
The problem is that this works but I don't understand why it does. I have two event handlers registered to FormClosed so I decided it would be prudent to check in what order event handlers are processed.
It seems that event handlers are processed in the order they are registered. So it doesn't make sense that I can access userCfgForm.UserHasSaved after delegate { openForm = null }.
Should I worry about this or just be happy that it works?