動的に作成したMDI子フォームのTextboxの内容を保存するには? への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 トマト  (小学生) 投稿日時 2009/11/3 21:31:34
>違うのであれば実際に自分でつけた名前を指定してください。
わかりやすくするとChlidFormのソース表示の一行目の
Public Class (この部分)

が型名(クラス名)です。
投稿者 るきお  (社会人) 投稿日時 2009/11/2 05:40:15
>Dim cForm AS ChildFormだと、型ChildFormが定義されていませんと出てしまいます
>動的に、作成するフォームだからでしょうか?
いいえ。違うと思います。

最初の書き込みで
>TextBox1は、MDI子ウインドウにあります(ChlidFormが名前です)
とあるので、フォームの名前がChildFormだと思いましたが、
違うのであれば実際に自分でつけた名前を指定してください。
投稿者 winvis  (学生) 投稿日時 2009/11/2 03:51:58
回答ありがとうございます
Dim cForm AS ChildFormだと、型ChildFormが定義されていませんと出てしまいます
動的に、作成するフォームだからでしょうか?
Option Strict Onは、offです
投稿者 るきお  (社会人) 投稿日時 2009/11/2 02:24:48
こんにちは。

TextBox1はwinvisさんが追加したものであって、マイクロソフトが用意しているFormクラスのメンバーではありません。
だから、cForm.TextBox1はエラーです。
(cFormがForm型だからです。なぜcFormがForm型かというとDim cForm As Formとしているからです。)

そのフォームをChildFormと名づけているのであれば
Dim cForm AS ChildForm …
でうまくいくはずです。

ただし、Option Strict Onにしている場合はこれだと暗黙の型変換でエラーになってしまうので、自分で明示的に型変換を指定して次のようにする必要があります。
Dim cForm As ChildForm = DirectCast(Me.ActiveMdiChild, ChildForm)

この書き方なら万全なのでよくわからなければこのように書いておけばよいです。

ちなみに私は面倒なのでOption Strict はOnにしないでばしばし暗黙の型変換をしています。
投稿者 winvis  (学生) 投稿日時 2009/11/2 01:37:25
*まず、最初に
ほぞんなどのメインメニューは、親ウインドウにあります
TextBox1は、MDI子ウインドウにあります(ChlidFormが名前です)
この子ウインドウは、動的に作成されたものです
VB2008 Expressです
*ここから質問
Dim cForm As Form = Me.ActiveMdiChild
IO.File.WriteAllText(FileName, cForm.TextBox1.Text, System.Text.Encoding.GetEncoding("Shift-JIS"))
と、エラー(Textbox1は、system.windows.form.formのメンバではありません)が出るのですが
どうすればいいですか
数日ネットで探したんですがいい解決策が見つかりませんでした