My first question to this forum, so please be kind :D
I'm building a desktop application in C# that should read data from a Raspberry Pi and show it (values, charts...). The MainForm.cs has a menu strip where I can call a child form, ConnectionSetupForm.cs where I can enter the database connection values (db user, password, table, host, port, etc.) which are stored as Properties.Settings.Default.xxx (System.Configuration).
When I'm closing this child form with a save button, I want the MainForm to get this information and refresh. This works, but only after I restart the application, but it should be when the FormClosing or FormClosed event of the child form happens (in my example the MessageBox.Show() never occurs).
What am I missing? I have no errors and no warnings.
MainForm calls the child form ConnectionSetupForm:
private void showConnectionForm(object sender)
{
connectionSetupForm = new ConnectionSetupForm();
connectionSetupForm.MdiParent = this.ParentForm;
connectionSetupForm.StartPosition = FormStartPosition.CenterParent;
connectionSetupForm.ShowDialog();
connectionSetupForm.FormClosed += new FormClosedEventHandler(ConnectionForm_FormClosed);
}
private void ConnectionForm_FormClosed(object sender, FormClosedEventArgs e)
{
Properties.Settings.Default.Save();
Properties.Settings.Default.Reload();
MessageBox.Show("Closed"); // is never called, so this method is never called...
// actually, I want to do some stuff here, e.g.:
this.Text = Properties.Settings.Default.ApplicationName; // name is changed after restart only
connectionSetupForm = null;
}
This looks to be a simple mis-ordering of a couple lines. The
connectionSetupForm.ShowDialog();line is actually a call to a blocking function. This means nothing past this line will execute until AFTER your dialog closes. Because you add theFormClosedevent handler after the form has already closed, theConnectionForm_FormClosed()function never gets called.Try simply putting the
FormClosedevent handler before theconnectionSetupForm.ShowDialog();line.