VB.NET WPF UserControl の使い方

(Visual Studio 2015 版)

投稿日 2015/11/14

[Home] | VB.NET インデックス

概要

WPF を Windows.Forms アプリケーションの中で使うことができます。その場合、WPF ユーザコントロールを作成し Windows.Forms アプリケーションのフォームに貼り付けて使用します。

プロジェクトの作成

Visual Studio 2015 で普通に Windows.Forms アプリケーションのプロジェクトを作成します。次にWPF を使うために次のアセンブリ参照を追加します。


プロジェクトの「追加」コンテキストメニューから「新しい項目」ダイアログを開き、ユーザーコントロール (WPF) を追加します。ユーザコントロールの名前はここで指定しておきます。後から変更するのは面倒です。


ユーザコントロールのデザイン

この例は、OK と Cancel ボタンを持つユーザコントロールです。XAML ファイルを開いてデザインして行きます。このとき、「ダイレクト コンテンツがサポートされません」というエラーが出ますが、ビルドすれば消えるはずです。

ユーザコントロール・コンテナーには1つのコントロールしか置けないので、Grid をまず貼り付けて(ウィザードが自動でそうしてくれます)、Grid 上に他のコントロールを貼り付けます。変更したら、必ずビルドし直します。そうしないとエラーが表示されます。


コードの追加

ソリューションエクスプローラで XAML を選んで「コードの表示」メニューを実行すると VB ソース (ここでは OkCancel.xaml.vb) が表示されます。ここに、Windows.Forms のユーザコントロール同様にプロパティやメソッドを追加していきます。


サンプル

このサンプルは OK ボタンと Cancel ボタンを持つユーザーコントロールです。ボタンをクリックすると Click イベントが発生します。プロパティは TextOK と TextCancel があり、ボタンの表示文字列を変更できます。

' OkCancel UserControl
Public Class OkCancel
    ' ボタンがクリックされたときに発生するイベント
    Public Event Click As EventHandler
    
    ''' <summary>
    ''' OK ボタンの表示文字列
    ''' </summary>
    ''' <returns></returns>
    Public Property TextOK As String
        Get
            Return buttonOK.Content
        End Get
        Set(value As String)
            buttonOK.Content = value
        End Set
    End Property
    
    ''' <summary>
    ''' Cancel ボタンの表示文字列
    ''' </summary>
    ''' <returns></returns>
    Public Property TextCancel As String
        Get
            Return buttonCancel.Content
        End Get
        Set(value As String)
            buttonCancel.Content = value
        End Set
    End Property
    
    ''' <summary>
    ''' OK ボタンがクリックされたとき
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub buttonOK_Click(sender As Object, e As System.Windows.RoutedEventArgs)_
      Handles buttonOK.Click
        RaiseEvent Click(buttonOK, New EventArgs)
    End Sub
    
    ''' <summary>
    ''' Cancel ボタンがクリックされたとき
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub buttonCancel_Click(sender As Object, e As _
       System.Windows.RoutedEventArgs) Handles buttonCancel.Click
    RaiseEvent Click(buttonCancel, New EventArgs)
    End Sub
End Class

このコントロールのテストプログラムを下に示します。OK ボタンは TextOK プロパティを使って「了解」に、同様に Cancel ボタンは TextCancel を使って「閉じる」に変更します。下の画像はそのデザイン画面です。OkCancel ユーザーコントロールはツールボックスの一番上に表示されているはずなので、それをドロップします。

これを実行すると、下のように表示されます。「了解」ボタンをクリックするごとに表示文字列のカウントがインクリメントされます。「閉じる」ボタンをクリックするとメッセージボックスで確認後、アプリケーションを終了します。


テストプログラムのソースコードを下に示します。

Public Class Form1
    Private clickCount As Integer = 0
    
    ''' <summary>
    ''' フォームがロードしたとき
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        OkCancel1.TextOK = "了解"
        OkCancel1.TextCancel = "閉じる"
        ' Click イベントハンドラを登録する。
        AddHandler OkCancel1.Click,
            Sub(sender1, e1)
                If sender1 Is OkCancel1.buttonOK Then
                    clickCount += 1
                    Label1.Text = clickCount.ToString() & _
                       " 回 了解ボタンが Click された   。"
                ElseIf sender1 Is OkCancel1.buttonCancel Then
                    If MessageBox.Show("アプリケーションを終了します。", "確認", _
                          MessageBoxButtons.OKCancel,  MessageBoxIcon.Asterisk) = _
                          DialogResult.OK Then
                    Close()
                    End If
                Else
                
                End If
            End Sub
    End Sub
End Class

 

 


 

 開設 2014年12月   著作権 2014-2015 bonk.red  連絡先: こちらからメッセージを送ってください。

 このページの先頭へ..