フォーム名をDirectCastで動的に指定した場合の問題
- 題名: フォーム名をDirectCastで動的に指定した場合の問題
- 著者: Sam
- 日時: 2012/08/02 10:30:16
- ID: 30799
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: フォーム名をDirectCastで動的に指定した場合の問題
- 著者: shu
- 日時: 2012/08/02 11:06:10
- ID: 30800
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: フォーム名をDirectCastで動的に指定した場合の問題
- 著者: Sam
- 日時: 2012/08/02 12:00:33
- ID: 30802
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
【解決したい問題】
いつも大変参考にさせていただいております。
さて、汎用のヘルプフォームを作成するため、親フォームからヘルプフォーム(子フォーム?これは、リンクプロジェクトとして作成)を呼び出し、呼び出す条件(親フォーム名、ヘルプデータを入力したいコントロール種類、コントロール名など)をヘルプフォームへ渡し、ヘルプフォームで検索、確定した値を親フォームの該当コントロールへ入力する仕様を考えています。
そこで、フォーム名を動的に指定するため、
過去の発言
**********************************************************
題名: Re[1]: 生成するフォームクラス名を動的に指定したい
著者: 魔界の仮面弁士
URL: http://yaplog.jp/orator/archive/39
日時: 2004/12/14 20:21:29
ID: 8043
一部省略
Dim FormName As String = "WindowsApplication1.Form1"
Dim F As Form = DirectCast(Type.GetType(FormName).GetConstructor(New Type() {}).Invoke(Nothing), Form)
F.Show()
**********************************************************
を参考にさせていただき、次のようなプロジェクトを作成し実験しました。
プロジェクト名:WindowsApplication1
フォーム数:2
フォーム名:Form1 , Form2
Form1のコントロール:
System.Windows.Form.Button 1つ、名称:Button1
System.Windows.Form.TextBox 1つ、名称:TextBox1
Form1のコードはButton1クリックイベントのみ
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Form2.Show()
End Sub
Form2のコントロール:
System.Windows.Form.Button 1つ、名称:Button1
System.Windows.Form.TextBox 1つ、名称:TextBox1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim FormName As String = "WindowsApplication1.Form1"
Dim F As Form = DirectCast(Type.GetType(FormName).GetConstructor(New Type() {}).Invoke(Nothing), Form)
Dim CTL As Control
For Each CTL In F.Controls
If CTL.GetType Is GetType(TextBox) Then
If CTL.Name = "TextBox1" Then
CTL.Text = "あああああああああ"
End If
End If
Next
End Sub
上記の条件で、Form1のButton1クリックイベントでForm2を起動し、
Form2のButton1クリックイベントで、Form1のTextBox1に"あああああああああ"の文字を入力させたいのですが、特にエラーは出ないのですが、文字が入力されません。
【解決するために何をしたか】
Form2のButton1クリックイベントを
Dim FormName As String = "WindowsApplication1.Form1"
Dim F As Form = DirectCast(Type.GetType(FormName).GetConstructor(New Type() {}).Invoke(Nothing), Form)
の部分を↓
Dim F As Form = WindowsApplication1.Form1
の様に変更し、
-------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim F As Form = WindowsApplication1.Form1
Dim CTL As Control
For Each CTL In F.Controls
If CTL.GetType Is GetType(TextBox) Then
If CTL.Name = "TextBox1" Then
CTL.Text = "あああああああああ"
End If
End If
Next
End Sub
-------------------------------------------------
としてやれば、Form1のTextBox1に"あああああああああ"が入力されます。
フォーム名をDirectCastにてForm型に変更するやり方だと、変数Fに直接WindowsApplication1.Form1を代入するのと何か違いがあるのでしょうか。
もしかしたら、初歩的な何かを見逃しているかもしれませんが、よろしくご教授いただけたらと思います。