'
' 機能 : 窗体的表示处理 '
' 引き数 : assemblyname -
' formname - 窗体名
' parameter - 画面间的传值
' parent - Owner窗体
'
' 返り値 :新窗体
'
' 機能説明 : 不使用imports,而是动态的读取dll文件生成窗体。
' 呼び出されたフォームは引数parentで指定したフォームがOwnerとして、
' 引数parameterとして指定した画面間パラメータがGUIParameterとして参照できる。
'
' 備考 : 参照するライブラリはWindowsFormを含み、GUIParameterプロパティ
' (型はCommon.GUIParam)を持たなければならない。
' ライブラリの配置はアプリケーションと同じ階層に配置すること。
' アセンブリ名はプロジェクトのプロパティで設定したものを指定する。
' (DLLファイル名ではない。)
' 使用例)
' ' アセンブリ名1000TestFormのTest.TestForm.TargetFormフォームを表示する
' ' GUIParameterは定義済みでOwnerはMe
' MenuUtil.ShowFormByName("1000TestForm", _
' "Test.TestForm.TargetForm", GUIParameter, Me.ParentForm)
'
Public Shared Function ShowDialogFormByName(ByVal assemblyname As String, ByVal formname As String, _
ByVal parameter As GUIParam, ByVal parent As IWin32Window) As System.Windows.Forms.Form
Dim asm As Assembly ' アセンブリ(dll)
Dim frm As Object ' 遷移先Formのインスタンス
Dim type As Type ' 遷移先Formのタイプ
' アセンブリ読み込み
asm = Assembly.Load(assemblyname)
' リフレクション
frm = asm.CreateInstance(formname)
type = frm.GetType
' GUIParamterの渡し
type.InvokeMember("GUIParameter", _
BindingFlags.SetProperty, _
Nothing, _
frm, _
New Object() {parameter})
' Showメソッドの呼び出し
type.InvokeMember("ShowDialog", _
BindingFlags.Public Or _
BindingFlags.InvokeMethod Or _
BindingFlags.Instance, _
Nothing, frm, New Object() {parent}, _
Nothing, Nothing, New String() {"owner"})
Return CType(frm, System.Windows.Forms.Form)
End Function