Form には、通常、なかったこのファイルは、作成しているソフトを制御しているみたいです。
特に、留意しておきたいのが、起動した Window の情報をここに保持している事です。
お勉強レベルではあまり関係ないですが、本格的になると避けられない そんな感じです。 [初心者の悪あがきぃレベル] です。.
Class Application の存在は、普通は、あまり関係ないです。
これを使うのは、きっと、WPF を もっと習得してからなのでしょう。
ソースコード(Application.xaml.vb)を開くと こんな コメントのみ記述されています。
' Startup、Exit、DispatcherUnhandledException などのアプリケーション レベルのイベントは、
' このファイルで処理できます。
基本のおさらい。
自分で作っているソフトのプロジェクト WpfApplication1 を、オブジェクト ブラウザで開くと
NameSpace : WpfApplication1
Class : Application (名称固定)
Class : Window1
という構成になっているのが確認出来ます。
これを、ソリューション エクスプローラ で開くと、
My Project
Application.xaml
(Application.xaml.vb)
Window1.xaml
(Window1.xaml.vb)
という構成です。
.xaml がデザイナーで表示される画面の設計で、.xaml.vb が画面を制御する所謂 コード です。
共に、テキストファイルですから、メモ帳 等でも極 普通に開いて見る事が出来ますね。
さて、Application に話を戻します。
このクラスは、起動される Windows の情報を保持しています。
Pablic Class ですから、Window1.xaml.vb から、次の様にアクセスする事で、
そのプロジェクトで現在使われている Windows の情報が得られます。 イメージです。 これでは役には ... 立たないなぁ。
Dim currentWindows As System.Windows.WindowCollection = Application.Current.Windows
Dim currentWindowsCount As Integer = Application.Current.Windows.Count
Dim i As Integer = 0 'TopWindow
Dim currentWindowName As String = Application.Current.Windows.Item(i).Title
スタートアップ画面になる Window1 以外(Application)が、画面情報を保持しているお陰で、
スタートアップ画面を閉じても、他に開かれている画面があれば、ソフトを終了しない様に構成が出来る訳です。
以前、VB WPF お勉強 03 シャットダウンモード で書いた 標準設定を変えないと Form と挙動が異なる のは、
Application.Current.Windows.Count が 0 にならないと、ソフトを終了しない標準設定になっているからですね。
さて、話を元に戻して。
あまり、出番はない気がしますが、
メイン画面に配置したボタンから、現在開かれている画面の一覧を取得し、ラベルに表示する例を。
Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded勿論、Window を生成するボタン や Me.MouseEnter の イベントハンドラに GetWindows() を記述すれば、挙動が掴めますね。
Me.Button2.Content = "Win Inf"
GetWindows()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button2.Click
GetWindows()
End Sub
Private Sub GetWindows()
Dim listWindows As String = ""
For i As Integer = 0 To Application.Current.Windows.Count - 1
listWindows += " " + Application.Current.Windows.Item(i).Title + Chr(13)
Next i
Me.Label1.Content = "Windows (" + Application.Current.Windows.Count.ToString + ")" + Chr(13) + listWindows
End Sub
本来、この Application クラスの位置付けは、標準で用意された挙動を 細かく制御する場合に弄るもの と お勉強レベルでは 捕らえておきます。
次の投稿の最後にシリーズのリンクを纏めてあります。 VB WPF お勉強 01 印象
0 件のコメント:
コメントを投稿