Shibli
Shibli

Reputation: 6149

Catching the return of window

There is function in which a new window is opened and shown. I want to put a condition onto the closure of that window. I wrote what I want as a pseudo-code below.

private void fnc (object sender, RoutedEventArgs e)
{
    MyWindow nw = new MyWindow();

    nw.Show();

    // Pseudo code: When (nw.Close()) {do something}
}

Upvotes: 0

Views: 56

Answers (2)

Phil
Phil

Reputation: 43001

private void fnc (object sender, RoutedEventArgs e)
{
    MyWindow nw = new MyWindow();

    nw.Show();

    // inline
    nw.Closed += (s1, e1) => Debug.WriteLine("Closed");

    // or
    nw.Closed += (s1, e1) =>
                        {
                            Debug.WriteLine("Closed");

                        };

    // or
    w.Closed += OnWindowClosed;
}

private void OnWindowClosed(object s, EventArgs e)
{
    Debug.WriteLine("Closed");
}

Upvotes: 4

Justin Pihony
Justin Pihony

Reputation: 67115

You want to use ShowDialog(). This will make your code wait until the new window returns.

private void fnc (object sender, RoutedEventArgs e)
{
    MyWindow nw = new MyWindow();
    nw.ShowDialog();
    //Do something when nw returns
}

Or, if you do not want to freeze up your parent window, then you will have to attach to the Window.Closed

private void fnc (object sender, RoutedEventArgs e)
{
    MyWindow nw = new MyWindow();
    nw.Closed += nw_Closed;
    nw.Show();
}

private void new_Closed(object sender, CancelEventArgs e)
{
    //Do Something
}

You could use an inline delegate using lambda expressions if you do not have a method already prepared, also:

private void fnc (object sender, RoutedEventArgs e)
{
    MyWindow nw = new MyWindow();
    nw.Closed += (sender, cancelEventArgs) => 
        {
           //Do Something
        };
    nw.Show();
}

Upvotes: 1

Related Questions