web-dev-qa-db-ja.com

WPFの終了時にコードを実行する

イベントハンドラーの使用に慣れていないので、Close/Closedイベントでコードを実行するイベントハンドラーの使用方法を示すコードを誰かが持っているか、または指示できるかどうか疑問に思っていましたか?

これは、この回答された質問のために実行できることを知っています。

WPFフォームでコードを実行するclose

しかし、私はいくつかの方向性が必要です。

ありがとうございます=)

21
Stylzs05

それはこのXAMLだけです

<Window ... Closing="Window_Closing" Closed="Window_Closed">
    ...
</Window>

ClosingおよびClosedイベントの両方のコード

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    ...
}

private void Window_Closed(object sender, EventArgs e)
{
    ....
}
40
Clemens

あなたがそれをすべてコードビハインドで行いたいなら、これをあなたのwindows .csファイルに入れてください

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Closed += new EventHandler(MainWindow_Closed);
        }

        void MainWindow_Closed(object sender, EventArgs e)
        {
            //Put your close code here
        }
    }
}

Xamlで一部を行い、コードビハインドで一部を行いたい場合は、これをxamlで行います。

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Closed="MainWindow_Closed">
    <Grid>

    </Grid>
</Window>

そしてこれは.cs

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        void MainWindow_Closed(object sender, EventArgs e)
        {
            //Put your close code here
        }
    }
}

上記の例は、xamlアプリの任意のフォームに適用できます。複数のフォームを持つことができます。アプリケーション終了プロセス全体にコードを適用する場合は、app.xaml.csファイルを次のように変更します

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        protected override void OnExit(ExitEventArgs e)
        {
            try
            {
                //Put your special code here
            }
            finally
            {
                base.OnExit(e);
            }
        }
    }
}
25
Dan P

次のようにApp.Xaml.csのOnExit関数をオーバーライドできます。

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
    protected override void OnExit(ExitEventArgs e)
    {
        //do your things
        base.OnExit(e);
    }
}
1
Dmitry Reznik

Josh SmithのMVVMに関する記事には、ワークスペースの一部であるViewModelの良い例と、閉じるときに何をすべきかが示されています。このアーキテクチャは、ウィンドウを閉じるだけでなく、ViewModelsなどをクリーンアップすることで拡張できます。

ジョシュ・スミスMVVMの例

図7では、あなたが話している状況を説明しています。お役に立てれば!

1
Jimmy Lyke

Microsoft Visual StudioでC#を使用している場合、以下がうまくいきました。

Window.csファイル

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace Name_Space
{
    public partial class Window : Form
    {

        public Window()
        {
            InitializeComponent();
           //...
        }

        private void Window_Load(object sender, EventArgs e)
        {
          //...
        }

        private void Window_Closed(object sender, EventArgs e)
        {
            // Your code goes here...!
        }
    }
}

Window.Designer.csファイルで、この行を次のメソッドに追加します

    ...
        private void InitializeComponent()
        {

            ...

            // 
            // Window
            // 
            ...

            this.Closed += new System.EventHandler(this.Window_Closed); // <-- add this line
         }

    ...
0
yogurt1989