VB.NETのWPFアプリで、画面ロード時のイベント(Loadedイベント)を登録する方法

こんにちは!

今日は「VB.NETのWPFアプリで、画面ロード時のイベント(Loadedイベント)を登録する方法」について書きたいと思います。

WPFアプリを作っていると、「画面が表示されたときに初期化処理をしたい!」ってこと、よくありますよね。そんなときに使うのが Loaded イベントです。でも、どうやって登録するのが正解なんだろう?と迷うこともあるはず。

そこで今回は、基本的なやり方を順番に紹介しながら、どっちを選ぶといいかも一緒に考えてみたいと思います!


動作確認環境

  • Visual Studio 2022
  • .NET9
  • WPF

ソースコードはこちらに置いておきます。


まずは基本:XAMLで登録する方法

一番シンプルなのは、XAMLファイルに直接書く方法です。

例えばこんな感じ。

<Window x:Class="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"
        Loaded="Window_Loaded">
    <Grid>
    </Grid>
</Window>

ここで Loaded="Window_Loaded" と指定してあげると、VBコード側(MainWindow.xaml.vb)にこんなイベントハンドラを用意できます。

Class MainWindow
    Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
        ' ここにLoaded時の処理を書く
        MessageBox.Show("ウィンドウがロードされました")
    End Sub
End Class

これで、ウィンドウが表示されたときにポコンとこんな感じのメッセージが出てきます!

すごく直感的でわかりやすいですよね。


次に:コードビハインドで登録する方法(AddHandlerを使う)

もう一つのやり方が、コード側で登録する方法です。

具体的には、こんなふうに AddHandler を使います。

Class MainWindow
    Public Sub New()
        InitializeComponent()

        AddHandler Me.Loaded, AddressOf MainWindow_Loaded
    End Sub

    Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs)
        ' ここにLoaded時の処理を書く
        MessageBox.Show("ウィンドウがロードされました(コード登録)")
    End Sub
End Class

ここでは InitializeComponent() の後に AddHandler でイベントを登録しています。

つまり、XAMLでは何も書かなくてOK。全部コードだけで完結できます。

この方法の良いところは、動的に作ったコントロールにも同じように使えることです。たとえば、実行時にボタンを作って、そのボタンにイベントを付ける…みたいな場面でも便利なんですよね。


イベントの解除方法(RemoveHandler)も覚えておこう!

ここでワンポイント。

AddHandler でイベントを登録したら、場合によってはイベントを解除したいときもあります。

そんなときは、RemoveHandler を使います!

書き方はとってもシンプルです。

RemoveHandler Me.Loaded, AddressOf MainWindow_Loaded

登録したときと同じ組み合わせ(イベントとメソッド)を指定してあげればOK。

たとえば、ウィンドウを閉じる直前にイベントを解除してメモリリークを防ぎたいときなどに使えます。

ポイント: AddHandler したら、必要に応じて RemoveHandler も考えておくと、より安全なコードになります!


結局、どっちを使えばいいの?

ここでちょっと迷いますよね。

ざっくり言うと、こう考えるといいです!

  • 単純な画面なら → XAMLで登録
  • たくさんコントロールを動的に作るなら → AddHandlerでコード登録

たとえば、「設定画面を作っていて、初期値を読み込んでセットする」みたいなときは、XAMLにサクッと Loaded="Window_Loaded" と書いちゃったほうがスッキリします。

逆に、「ユーザーが選んだ項目に応じてコントロールを動的に増やす」みたいな高度なことをやるときは、AddHandlerを使ったほうが柔軟に対応できます。


小さな注意ポイント

ちょっと細かいですが、Loaded イベントは「画面が描画された直後」ではなく、「レイアウトが終わったタイミング」で発生します。

つまり、見た目の表示が完全に終わったわけではないこともあるので、重たい処理をするときは注意したほうがいいです。

本当に描画完了後に何かしたいなら、ContentRendered イベントを使う、という手もあります。

でも普通の初期化くらいなら、Loaded で十分です。


というわけで

VB.NETのWPFで「画面ロード時のイベントを登録する方法」について紹介してきました!

  • XAMLに書くか
  • コードでAddHandlerするか
  • 必要に応じてRemoveHandlerで解除もできる

どっちもできるので、場面によって使い分けるといいですね。

ちょっとした初期化でも、こういう基本的なイベントを押さえておくと、アプリ開発がぐっと楽になります。

ぜひ、試してみてくださいね!

ではでは、また次の記事でお会いしましょう〜。