Home > database >  C# SqlConnection child form closing, but data is not updated in MainForm
C# SqlConnection child form closing, but data is not updated in MainForm

Time:01-07

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;
}

CodePudding user response:

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 the FormClosed event handler after the form has already closed, the ConnectionForm_FormClosed() function never gets called.

Try simply putting the FormClosed event handler before the connectionSetupForm.ShowDialog(); line.

private void showConnectionForm(object sender)
{
    connectionSetupForm = new ConnectionSetupForm();
    connectionSetupForm.MdiParent = this.ParentForm;
    connectionSetupForm.StartPosition = FormStartPosition.CenterParent;
    connectionSetupForm.FormClosed  = new FormClosedEventHandler(ConnectionForm_FormClosed);
    connectionSetupForm.ShowDialog();
}
  • Related