作成2013.04.04
ここでは、Windowsフォームアプリケーション用サンプルコードをWPFアプリケーション用コードに変換しま
す。フォームアプリケーションからWPFアプリケーションへの変化が最近の主流のようです。
- 参照元情報
「クラスを使用する」にジャンプする
作成方法の詳細は上記を参照願います。
- フォームアプリケーションからWPFアプリケーションへの変更
小規模アプリでは、クラスファイルの参照設定がわずらわしいと思うこともあります。ここでは簡易的な方法でクラスを使用します。
完成ファイルは以下からダウンロードできます。
ダウンロード後は解凍してから使用してください。
WPFクラスを使用するをダウンロードする。
解凍すると「33WpfPersons」フォルダーがあります。
注(1)「33WpfPersons」フォルダーの「WpfPersons.sln」ファイルをダブルクリックすると「Microsoft Visual Basic 2010 Express」が起動します。
注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
注(3)「ソリューションエクスプローラ」ウインドウ内の「MainWindow.xaml」をダブルクリックすると「デザイン」と「XAML」が表示されます。
注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
注(5)「WpfPersons.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。
- WpfPersons.slnの実行
(1)「Microsoft Visual Basic 2010 Express」のデバッグ機能を使用します。
(2)「デバッグ」_「デバッグ開始」を選択します。
(3)Test実行ボタンを押すと、クラスを使用した結果のメッセージボックスが表示されます。
(4)動作を確認するにはデバッグ機能を使用する必要があります。
- プロジェクトの構成
(1)UserControl1.vbの構成
・UserControlクラスはありません。
(2)XAMLコードの構成
・Button、TextBox、CheckBoxを配置します。
- 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="243" Width="381">
<Grid>
<StackPanel Name="StackPanel1">
<Button Content="Test実行" Height="23" Name="Button1" Width="75" HorizontalAlignment="Left" />
<TextBox Height="24" Name="TextBox1" Width="120" HorizontalAlignment="Left" Text="Microsoft" />
<TextBox Height="24" Name="TextBox2" Width="120" HorizontalAlignment="Left" Text="Visual" />
<TextBox Height="24" Name="TextBox3" Width="120" HorizontalAlignment="Left" Text="Basic" />
<TextBox Height="24" Name="TextBox4" Width="120" HorizontalAlignment="Left" Text="2010" />
<CheckBox Content="CheckBox" Height="16" Name="CheckBox1" HorizontalAlignment="Left" IsChecked="True" />
</StackPanel>
</Grid>
</Window>
- XAMLのポイント
(1)ごく、一般的な記述のみです。
- Class MainWindowクラスの全コード
Class MainWindow
Dim person1 As New Persons
Dim player1 As New Players
Dim player2 As New Players
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'プロパティの値セット
With person1
.FirstName = TextBox1.Text 'デバッグポイント1
.MiddleName = TextBox2.Text
.LastName = TextBox3.Text
.BirthYear = TextBox4.Text
.Alive = CheckBox1.IsChecked
End With
' Test the FullName method.
Dim test As String = person1.FullName 'デバッグポイント2
MsgBox(test)
' test the Age property and CalcAge method.
MsgBox(CStr(person1.Age) & " years old")
' Test the Alive property.
If person1.Alive = True Then
MsgBox(person1.FirstName & " is alive")
Else
MsgBox(person1.FirstName & " is no longer with us")
End If
With player1
.FirstName = "Andrew"
.LastName = "Cencini"
.Number = 43
.Position = "Shortstop" 'デバッグポイント3
End With
With player2
.FirstName = "Robert"
.LastName = "Lyon"
.Number = 11
.Position = "Catcher"
End With
test = player1.Position & " " & player1.FullName & ", #" & CStr(player1.Number) & " is now at bat." 'デバッグポイント4
MsgBox(test)
test = player2.Position & " " & player2.FullName & ", #" & CStr(player2.Number) & " is on deck."
MsgBox(test)
End Sub
End Class
- Public Class Personsクラスの全コード
Public Class Persons
Private firstNameValue As String
Private middleNameValue As String
Private lastNameValue As String
Public Alive As Boolean
Private birthYearValue As Integer
Public Function FullName() As String
If middleNameValue <> "" Then
FullName = firstNameValue & " " & middleNameValue & " " & lastNameValue
Else
FullName = firstNameValue & " " & lastNameValue
End If
End Function
Private Function CalcAge(ByVal year As Integer) As Integer
CalcAge = My.Computer.Clock.LocalTime.Year - year
End Function
Public Property FirstName() As String
Get
FirstName = firstNameValue
End Get
Set(ByVal value As String)
firstNameValue = value
End Set
End Property
Public Property MiddleName() As String
Get
MiddleName = middleNameValue
End Get
Set(ByVal value As String)
middleNameValue = value
End Set
End Property
Public Property LastName() As String
Get
LastName = lastNameValue
End Get
Set(ByVal value As String)
lastNameValue = value
End Set
End Property
WriteOnly Property BirthYear() As Integer
Set(ByVal value As Integer)
birthYearValue = value
End Set
End Property
ReadOnly Property Age() As String
Get
' Age = My.Computer.Clock.LocalTime.Year - birthDateValue
Age = CalcAge(birthYearValue)
End Get
End Property
End Class
- Public Class Playersクラスの全コード
Public Class Players
Inherits Persons
Private numberValue As Integer
Private positionValue As String
Public Property Number() As Integer
Get
Number = numberValue
End Get
Set(ByVal value As Integer)
numberValue = value
End Set
End Property
Public Property Position() As String
Get
Position = positionValue
End Get
Set(ByVal value As String)
positionValue = value
End Set
End Property
End Class
- コードの解説
(1)myControl.UC = Meは特別なコードです。UserControl1クラスで Public UC As MainWindowとし、変数UCをMainWindow型で生成します。
MeはMainWindowの実体であり、UserControl1クラスにMainWindowの実体を渡します。
(2) Public Sub Timer_TickはUserControl1クラスから呼び出されます。
- Public Class UserControl1クラスのコード
Public Class UserControl1
Public UC As MainWindow
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
UC.Timer_Tick(sender, e)
End Sub
End Class
- コードの解説
(1)Class MainWindowクラスのコードと同じページ内にPersonsクラスとPlayersクラスを記載します。
(2)こうすると、ややこしい参照設定を行うことなく、独自に作成したクラスを使用できます。
感想:
(1)クラスライブラリーを使用して作成したクラスをビルドするとDLLファイルが作成されます。
(2)大規模なアプリではDLLファイルは大変有効ですが、参照設定が不可欠となります。
(3)小規模なアプリでは、Class MainWindowクラスのコードと同じページ内にクラスを記載したほうが簡単です。