忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

他のEXEファイルにあるフォームを表示する方法その2(Activator.CreateInstanceの使い方)

あるEXEファイルから、他のEXEファイルの中のフォームを強制的に表示する方法として以下の記事で説明しましたが、
他のEXEファイルにあるフォームを表示する方法(Activator.CreateInstanceの使い方)
この方法ではフォームを表示するだけで、面白味が在りませんので、今回はフォームにプロパティとメソッドを追加して それらに対するアクセス方法を説明します。

先ずは、フォームにテキストボックスを1個追加し、それに対して値を設定したり取得するプロパティと、 テキストボックスの内容を表示するメソッドを追加します。

呼び出される側のフォーム

Public Class Form1

    Private mstrParamData As String

    'テキストボックスに値を設定するプロパティ
    Public WriteOnly Property SetParamData As String
        Set(value As String)
            Me.TextBox1.Text = value
        End Set
    End Property

    'テキストボックスの内容を取得するプロパティ
    Public ReadOnly Property GetTextData As String
        Get
            Return Me.TextBox1.Text
        End Get
    End Property

    '外部からアクセス可能なメソッド
    Public Sub DspTextBox()
        MessageBox.Show("TextBox1.Text : " & Me.TextBox1.Text)
    End Sub

    'ボタンクリックイベント
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        '自分を閉じる
        Me.Close()
    End Sub

End Class



上記のフォームが含まれる REF0002.EXE を呼出す側のソースは以下の通りです。
こちらの方は、特にフォームを持たずにMain() 関数からの実行となっています。

呼び出す側のMainソース

Public Module Main

    Sub Main()
        '自分自身の実行ファイルのパスを取得する
        Dim appPath As String = _
            System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
        'アセンブリ"REF0002.exe"を読み込む(「REF0002.EXE」は「REF0001.EXE」が存在するフォルダに在ります)
        Dim asmExe As System.Reflection.Assembly = _
            System.Reflection.Assembly.LoadFile(appPath & "\REF0002.exe")
        'Form1のTypeを取得する(名前空間を指定しているのでフォーム名の前に名前空間を付加)
        Dim typForm As Type = asmExe.GetType("REF0002.Form1")
        'フォーム作成用変数
        Dim frm As Form
        'フォームのインスタンスを作成
        Dim obj As Object = Activator.CreateInstance(typForm)
        'インスタンスをフォームとして扱う
        frm = DirectCast(obj, Form)

        'プロパティの設定
        Dim pinf As System.Reflection.PropertyInfo = typForm.GetProperty("SetParamData")
        pinf.SetValue(frm, "Set From REF0001", Nothing)

        'フォームの ShowDialog メソッドを使用する
        frm.ShowDialog()

        'プロパティの取得
        pinf = typForm.GetProperty("GetTextData")
        Dim str As String = CStr(pinf.GetValue(frm, Nothing))
        MessageBox.Show(str)

        'メソッドの利用
        Dim minf As System.Reflection.MethodInfo = typForm.GetMethod("DspTextBox")
        minf.Invoke(frm, Nothing)
    End Sub

End Module



プロパティの情報(System.Reflection.PropertyInfo)を取得する為に、Typeの GetProperty メソッドを使います。 その PropertyInfoSetValue メソッドでプロパティへの値を設定します。

また、 PropertyInfoGetValue メソッドでプロパティの値の取得を行います。

さらにメソッドの実行は、プロパティと同様にTypeの GetMethod メソッドによりメソッド情報(System.Reflection.MethodInfo)を取得し PropertyInfoInvoke メソッドで該当するメソッドの実行を行います。
これを実行すると以下の様な表示になります。

関連する記事

他のEXEファイルにあるフォームを表示する方法(Activator.CreateInstanceの使い方)











PR

コメント

コメントを書く