我首先打开一个窗口(让它称之为window1),然后从这个父窗口打开两个子窗口。现在我想关闭窗口2和3关闭窗口1(即他们已完成工作)。
我尝试在父窗口中调用任一子窗口的窗口关闭事件时的方法,并且我维护一个静态变量以确保两个窗口都关闭。事情是,虽然正在调用该方法,但我无法关闭父窗口。
所以请解释如何做到这一点。
我的代码:
//Parent window Creating child windows
private void button_Click(object sender, RoutedEventArgs e)
{
Window2 w2= new Window2();
Window3 w3= new Window3();
w2.Show();
w3.Show();
}
// Calling the parent window method upon window closeevent from child windows
private void Window_Closed(object sender, EventArgs e)
{
Window1 w1=new Window1();
w1.method1();
}
// parent window method
private void method1()
{
count++; //global static var
MessageBox.Show("BUT THIS GETS DISPLAYED");
if (count==2)
{
this.Close(); // doesnt work;
}
}
答案 0 :(得分:0)
你的代码没有在课程中列出,所以很难说,但是我假设windows_closed代码在子窗口中?如果不是,您缺少在父窗口代码中订阅子窗口关闭事件。
问题是你正在创建一个Window1的新实例来调用method1 - 因此计数只会达到一个。
一种简单的方法是将method1设为静态,因此您不需要从子窗口创建一个Window1实例来调用它。
试试这个
//this should be in Window1.cs
public static void method1()
{
count++;//global static var
MessageBox.Show("BUT THIS GETS DISPLAYED");
if(count==2)
{
this.Close(); // doesnt work;
}
}
//this should be in childwindow.cs
private void Window_Closed(object sender, EventArgs e)
{
Window1.method1();
}
注意 - 将方法设置为静态可能不是最好的方法 - 但我假设你对此很陌生,所以它会在你学习的时候做到。