- 題名: フォーム名を動的に指定した場合の値の取得方法について
- 日時: 2006/01/31 18:04:53
- ID: 14779
- この記事の返信元:
- (なし)
- この記事への返信:
- [14781] Re[1]: フォーム名を動的に指定した場合の値の取得方法について2006/01/31 18:19:08
- ツリーを表示
> 早速各案を調べて、案2.3.4にてうまく値を取得することができました。
> 案1については、私の勉強不足のため理解に苦しんでいます。
案2はあまりお奨めできないです……。読みにくいし。(^_^;)
とりあえず、案1のサンプル。
手順1) 実装させるメンバを定義したインターフェイスを用意します。
Public Interface ISayaForm
ReadOnly Property WinValue() As String
End Interface
手順2) 各子フォームに、それを実装させます。
Public Class 子フォーム
Inherits System.Windows.Forms.Form
Implements ISayaForm '★
Public ReadOnly Property WinValue() As String Implements ISayaForm.WinValue
Get
Return "〜戻り値〜"
End Get
End Property
End Class
これで完成です。呼び出し側は、
Me.ActiveControl.Text = DirectCast(f, ISayaForm).WinValue
という感じですね。これなら、Option Strict On でも大丈夫です。
> Dim oForm As Form = _
> DirectCast(Type.GetType(pName & "." & fName). _
> GetConstructor(New Type() {}).Invoke(Nothing), Form)
> oForm.ShowDialog()
> Me.ActiveControl.Text = _
> CType(FindControlByFieldName(oForm, "WinValue"), String)
最後の『oForm.Dispose()』が抜けていますよ。
なお案1 の場合、元のインターフェイスに、ShowDialog メソッドや
Dispose メソッドも実装しておけば、上記のコードを、
Dim f As ISayaForm = DirectCast(〜〜.Invoke(Nothing), ISayaForm)
f.ShowDialog()
Me.ActiveControl.Text = f.WinValue
f.Dispose()
のようにする事もできます。
分類:[.NET]
参考書等を読みながら、VB.NETを勉強中ですが、どうも行き詰まってしまったので
投函させて頂きました。
親フォーム(frmA)から子フォーム(frmB)を呼び出す際
今まではフォーム名固定で次のように処理し、問題なく子フォームの値が
取得できていたのですが
親フォーム内の記述
Dim f As frmB
f = New frmB
f.ShowDialog()
Me.ActiveControl.Text = f.WinValue
※WinValueは子フォームにてPublic WinValue As Stringと宣言しています。
この部分の子フォーム名を動的にするため、次のように変更しました。
Dim pName As String = "WindowsApplication1"
Dim fName As String = "frmB"
Dim f As Form = DirectCast(Type.GetType(pName & "." & fName). _
GetConstructor(New Type() {}).Invoke(Nothing), Form)
f.ShowDialog()
Me.ActiveControl.Text = f.WinValue
この変更により、子フォームの変数WinValueへアクセスできなくなってしまい
困っております。
このようにフォーム名を動的にした場合、そのフォームからの値の取得は
どのように行えば良いのでしょうか?
どなたかご指導頂けると幸いです。
環境:Windows2000/SP4/VS.NET 2003/.NET Framework 1.1
言語:VB
形態:Windowsアプリ