从另一个窗口访问主窗口

本文关键字:窗口 访问 另一个 | 更新日期: 2023-09-27 17:53:47

我已经创建了一个从主窗口打开的新窗口。当从这个窗口点击一个按钮时,窗口应该关闭,同时在主窗口中触发一些事件。

我认为这很容易实现,但我不知道如何访问主窗口方法&

任何帮助都会很感激。谢谢!:)

从另一个窗口访问主窗口

这是错误的做法…子窗口应该有一个可以为其注册处理程序的Closed事件。如果你真的需要在子窗口关闭之前从子窗口执行父窗口函数,那么你可以在打开子窗口时将委托传递给子窗口。

使用应用程序。主窗口属性

你不需要这样做…

在子窗口中定义一个事件,如:

public event EventHandler Closing;

当你在主窗口创建这个窗口时订阅它:

Window1 wnd = new Window1();
wnd.Closing += new EventHandler(childClosing);

关闭子窗口时检查事件是否已订阅并引发:

if (Closing != null) {
  Closing(this, new EventArgs());
}

当然你需要在主窗口设置一个childClosing方法:

private void childClosing(object sender, EvenrArgs e) {
  /// do your work
}

如果你需要传递一些数据,那么你可以创建一个派生自EvenrArgs的类并使用它。但你需要一个不同于eventandler的委托,比如:

class ClosingArgs : EventArgs {
   // some property here
}
子窗口

delegate void ClosingEventHandler(object sender, ClosingArgs e);

public event ClosingEventHandler Closing;

干杯!

这很简单,因为您希望在子窗口关闭时触发主窗口中的操作,只需注册关闭事件:

// In the main window, whenever your start your child window (not in the constructor)
private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        var window = new Window();
        window.Closed += new EventHandler(window_Closed);
        window.ShowDialog();
    }
    void window_Closed(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }

当子窗口关闭时,主窗口中的window_Closed函数将被调用。