2012-03-05 76 views
0

美好的一天。我有一个问题,我使用的WPF,我无法找到正确的方式来关闭窗体form1。从其他表格关闭Wpf表格

WpfForm form1 = new WpfForm(); 
form1.close(); 

请我需要帮助。

+2

你有什么已经尝试过?如果你不想紧密结合表单(不是一个好主意),你可能需要某种消息传递,但这些东西取决于你正在构建的系统,只有这几行代码我们无法猜测什么是什么你真的想做。 – Carsten 2012-03-05 16:40:07

+2

WPF使用[Window class](http://msdn.microsoft.com/en-us/library/system.windows.window.aspx)并且具有[close](http://msdn.microsoft.com /en-us/library/system.windows.window.close.aspx)方法,你显示你的'WpfForm'派生自窗口?那么你面临的问题是什么? – gideon 2012-03-05 16:42:52

回答

1

您需要在第二个表格中引用您的第一个表单。然后你可以简单地使用该参考来调用close。

有几种方法来处理它。你可以添加一个属性到你的第二个表单,以保存对你的第一个表单的引用。在创建第二个表单时,您将设置该属性,然后在第二个表单中的任何事件应关闭第一个表单(例如,单击一个按钮)时,可以使用该引用关闭表单。

2

正如马特所说你需要在你的第一种形式的第二种形式中有一个引用,所以假设你将有这个引用,你可以简单地添加一个事件处理程序,如下面在第一个形式代码当第二个表单的引用被设置为一个实例时,类似于你的Window_Loaded事件将是一个很好的候选人。

secondWindow.Closing += (s, e) => this.Close(); 

上面是一个内联事件处理程序,如果你宁愿有更详细的代码,你可以这样做:

secondWindow.Closing += CloseMe; 

private void CloseMe(Object sender, EventArgs e) 
{ 
    this.Close(); 
} 

柜面你有兴趣,飞碟双向先生讨论了内联事件处理程序在另一个问题的警告here

+0

+1,因为它是基于事件的方法 – 2012-03-06 15:03:23

1

至于说马特和保利,你需要在你的第一种形式的引用,所以如果你想做到这一点没有一个参考,你可以使用静态访问修饰符和代表喜欢这里;

public delegate void Method(); 
    private static Method close; 

    public Form1() 
    { 
     InitializeComponent(); 
     close = new Method(Close); 
    } 

    public static void CloseForm() 
    { 
     close.Invoke(); 
    } 

接下来在你的第二个表格,您可以关闭的第一个没有引用编写简单:

Form1.CloseForm();