开发者

How can I make execution pause until new form is closed?

开发者 https://www.devze.com 2023-01-28 06:11 出处:网络
I am making a Win Forms application to learn more since I don\'t have much experience with it. In my program, in the main form, I have a button. Clicking it launches another form. The code is as follo

I am making a Win Forms application to learn more since I don't have much experience with it. In my program, in the main form, I have a button. Clicking it launches another form. The code is as follows:

 private void btn_AddCat_Click(object sender, EventArgs e)
        {
            this.Invoke(new MethodInvoker(() =>
            {
                form_NewCat NewCatForm = new form_NewCat();
                NewCatForm.Show();
            }));

          开发者_如何学C  MessageBox.Show("Oops!");            
        }

The problem is, when the new form is launched, I want execution of the code behind the main form to pause at that point until the new form is closed. As an example, in the above code, I do not want 'Oops!' to get printed until the new form is closed. How can I achieve that?


Change the line

NewCatForm.Show();

to

NewCatForm.ShowDialog();


You don't need to invoke when you are in the UI thread. And you are in the UI thread in a button-click eventhandler.

private void btn_AddCat_Click(object sender, EventArgs e)
{
    form_NewCat NewCatForm = new form_NewCat();
    var dialogResult = NewCatForm.ShowDialog();
    MessageBox.Show("Oops!");            
}

You can check the dialogResult for OK, Cancel, Yes, No, etc if your form_NewCat sets this.DialogResult to any value before closing. This is the usual way to signal how the user exited the form/dialog.


Simply change Show to ShowDialog; this also let's you get a return value to indicate whether the form considered itself exiting with a specific status (ok, cancel, etc).


You want a modal dialog and I think you need NewCatForm.ShowDialog();

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号