MainWindow から開く新しい Window を作成しました。この Window からボタンをクリックすると、Window が閉じ、同時に MainWindow で何らかのイベントがトリガーされます。
これは簡単に実装できると思いましたが、別のウィンドウから MainWindow のメソッドとフィールドにアクセスする方法がわかりません...
どんな助けでも大歓迎です。ありがとう!:)
MainWindow から開く新しい Window を作成しました。この Window からボタンをクリックすると、Window が閉じ、同時に MainWindow で何らかのイベントがトリガーされます。
これは簡単に実装できると思いましたが、別のウィンドウから MainWindow のメソッドとフィールドにアクセスする方法がわかりません...
どんな助けでも大歓迎です。ありがとう!:)
これは間違った方法です...子ウィンドウにはClosed、ハンドラーを登録できるイベントが含まれている必要があります。子が閉じる前に子から親ウィンドウ関数を実行する必要がある場合は、子を開いたときにデリゲートを子に渡すことができます。
Application.MainWindowプロパティを使用します
この方法でそれを行う必要はありません...
子ウィンドウで次のようなイベントを定義します。
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 から派生したクラスを作成し、代わりにそれを使用します。ただし、次のような Eventhandler とは異なるデリゲートが必要です。
class ClosingArgs : EventArgs {
// some property here
}
子ウィンドウで
delegate void ClosingEventHandler(object sender, ClosingArgs e);
と
public event ClosingEventHandler Closing;
乾杯!
子ウィンドウが閉じたときに MainWindow のアクションをトリガーする必要があるため、これは非常に簡単です。単純に close イベントを登録します。
// 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 が呼び出されます。