気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

今回の記事は久しぶりにWPFのTipsを紹介します。
Windowsアプリケーションを開発する際、メインウィンドウが起動する前に
何らかの処理を行いたい場合が有ると思います。

例えば、メインウィンドウの起動前にログイン用のダイアログを表示し、認証に失敗した場合は、
そのままアプリケーションを終了させる場合もあると思います。

Windowsフォームの場合、このような時には、FormクラスのLoadイベントのハンドラに処理を記述していました。

WPFでもWindowクラスに似たようなLoadedイベントというものがあり、ここに書けばいいのかと思い記述してみたところ、
既にメインウィンドウが表示されてから、ハンドラに書いた処理が実行されてしまいました。

ドキュメントを参照すると「要素の配置、描画、および操作の準備が完了したときに発生します」と書かれているので、
このタイミングでは遅いみたいです。。。

何か代わるものが無いかと探してみたところ、ApplicationクラスのStartupイベントで同じことが出来ました。

[App.xaml]
<Application x:Class="Test.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="MainWindow.xaml" Startup="Application_Startup">

まず、[App.xaml]でStartupイベントのハンドラを登録します。
次に、[App.xaml.cs]にイベントハンドラのコードを追加します。

※[App.xaml]のデザインビューでプロパティウィンドウのイベント「Startup」をダブルクリックするだけで
ハンドラの登録とハンドラメソッドの追加は自動的に行うことが出来ます。

[App.xaml.cs]
    private void Application_Startup(object sender, StartupEventArgs e)
    {
       //メインウィンドウ起動前に行う処理を記述する
    }

処理を行った結果、アプリケーションのそのまま終了させたい場合は、Applicationクラスの「Current.Shutdown()」
メソッドを使用します。

「App」クラスはApplicationクラスの子クラスなので、以下のように記述するだけでOKです。

    private void Application_Startup(object sender, StartupEventArgs e)
    {
       try
       {

           //メインウィンドウ起動前に行う処理を記述する
       }
       catch
       {
           Current.Shutdown();
       }
    }

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://csfun.blog49.fc2.com/tb.php/69-6f2d20ec