- 題名: フォーム名を動的に指定した場合の値の取得方法について
- 日時: 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アプリ