動的に作成したMDI子フォームのTextboxの内容を保存するには? への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 るきお  (社会人)
投稿日時
2009/11/2 05:40:15
>Dim cForm AS ChildFormだと、型ChildFormが定義されていませんと出てしまいます
>動的に、作成するフォームだからでしょうか?
いいえ。違うと思います。
最初の書き込みで
>TextBox1は、MDI子ウインドウにあります(ChlidFormが名前です)
とあるので、フォームの名前がChildFormだと思いましたが、
違うのであれば実際に自分でつけた名前を指定してください。
>動的に、作成するフォームだからでしょうか?
いいえ。違うと思います。
最初の書き込みで
>TextBox1は、MDI子ウインドウにあります(ChlidFormが名前です)
とあるので、フォームの名前がChildFormだと思いましたが、
違うのであれば実際に自分でつけた名前を指定してください。
投稿者 winvis  (学生)
投稿日時
2009/11/2 03:51:58
回答ありがとうございます
Dim cForm AS ChildFormだと、型ChildFormが定義されていませんと出てしまいます
動的に、作成するフォームだからでしょうか?
Option Strict Onは、offです
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にしている場合はこれだと暗黙の型変換でエラーになってしまうので、自分で明示的に型変換を指定して次のようにする必要があります。
この書き方なら万全なのでよくわからなければこのように書いておけばよいです。
ちなみに私は面倒なのでOption Strict はOnにしないでばしばし暗黙の型変換をしています。
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のメンバではありません)が出るのですが
どうすればいいですか
数日ネットで探したんですがいい解決策が見つかりませんでした
ほぞんなどのメインメニューは、親ウインドウにあります
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のメンバではありません)が出るのですが
どうすればいいですか
数日ネットで探したんですがいい解決策が見つかりませんでした
わかりやすくするとChlidFormのソース表示の一行目の
が型名(クラス名)です。