33章:チュートリアル32:WPFクラスを使用する

    作成2013.04.04

     ここでは、Windowsフォームアプリケーション用サンプルコードをWPFアプリケーション用コードに変換しま す。フォームアプリケーションからWPFアプリケーションへの変化が最近の主流のようです。

  1. 参照元情報
    「クラスを使用する」にジャンプする
     作成方法の詳細は上記を参照願います。


  2. フォームアプリケーションからWPFアプリケーションへの変更
     小規模アプリでは、クラスファイルの参照設定がわずらわしいと思うこともあります。ここでは簡易的な方法でクラスを使用します。
     完成ファイルは以下からダウンロードできます。
     ダウンロード後は解凍してから使用してください。
      WPFクラスを使用するをダウンロードする。
     解凍すると「33WpfPersons」フォルダーがあります。
    注(1)「33WpfPersons」フォルダーの「WpfPersons.sln」ファイルをダブルクリックすると「Microsoft Visual Basic 2010 Express」が起動します。
    注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
    注(3)「ソリューションエクスプローラ」ウインドウ内の「MainWindow.xaml」をダブルクリックすると「デザイン」と「XAML」が表示されます。
    注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
    注(5)「WpfPersons.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。


  3. WpfPersons.slnの実行
    (1)「Microsoft Visual Basic 2010 Express」のデバッグ機能を使用します。
    (2)「デバッグ」_「デバッグ開始」を選択します。
    (3)Test実行ボタンを押すと、クラスを使用した結果のメッセージボックスが表示されます。
    (4)動作を確認するにはデバッグ機能を使用する必要があります。


  4. プロジェクトの構成
    (1)UserControl1.vbの構成
    ・UserControlクラスはありません。

    (2)XAMLコードの構成
    ・Button、TextBox、CheckBoxを配置します。


  5. 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>
    


  6. XAMLのポイント
    (1)ごく、一般的な記述のみです。


  7. 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
    


  8. 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
    


  9. 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
    


  10. コードの解説
    (1)myControl.UC = Meは特別なコードです。UserControl1クラスで Public UC As MainWindowとし、変数UCをMainWindow型で生成します。
      MeはMainWindowの実体であり、UserControl1クラスにMainWindowの実体を渡します。
    (2) Public Sub Timer_TickはUserControl1クラスから呼び出されます。


  11. 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
    


  12. コードの解説
    (1)Class MainWindowクラスのコードと同じページ内にPersonsクラスとPlayersクラスを記載します。
    (2)こうすると、ややこしい参照設定を行うことなく、独自に作成したクラスを使用できます。

    感想:
    (1)クラスライブラリーを使用して作成したクラスをビルドするとDLLファイルが作成されます。
    (2)大規模なアプリではDLLファイルは大変有効ですが、参照設定が不可欠となります。
    (3)小規模なアプリでは、Class MainWindowクラスのコードと同じページ内にクラスを記載したほうが簡単です。






34章:チュートリアル33:WPF での図形と基本描画の概要(1)に行く。

トップページに戻る。