- ベストアンサー
テキストBOXに文字を書けない。
VB2008EE を使っています。まだ素人レベルですが宜しくお願いします。 大元のフォーム frmxx0 から frmxx1.ShowDialog() で新しいフォームを表示します。 このフォームfrmxx1からであれば frmxx1.textbox1.text="あ" みたいに書き込めるのですが さらにここから frmxx2.ShowDialog()で2ページ目を開いて このフォームからfrmxx1.textbox1.text="あ" としても書き込んでくれません。 エラーにもならないです。 frmxx0を開かないでfrmxx01からfrmxx2.ShowDialog()で1ページ目を開いて、ここからfrmxx1.textbox1.text="あ"は書き込めます。 何か?やり方おかしいでしょうか? 説明が不十分かもしれません。ご理解いただければ幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 .NETをやるのであれば、まずインスタンスについてよく勉強して理解した方が良いと思います。 今回の場合は、form1.ShowDialog(Me) と記述する事によってform1の暗黙のインスタンスが生成されているので、アクセス出来るようになったのです。 ------------------------ Dim frm As New form1 frm.ShowDialog(Me) ------------------------ 上記のように自前でインスタンスを生成して呼び出し元のFormにアクセスするには、Ownerプロパティを使用します。 この場合ですと、 DirectCast(Me.Owner, form0).Text = "あ" をform1に記述すれば、呼び出し元のFormにもアクセス出来ると思います。 私は後者の方法を使用しています。 ちなみに、Dimで宣言しているかどうかはここでは関係ないです。
その他の回答 (1)
- xiaolong_goo
- ベストアンサー率29% (39/131)
いまやってみましたが、書き込めます。 もう少し補足が必要では?
お礼
ご回答ありがとうございます。 書き込みが出来たとの事で、私も大きなヒントになりました。 説明が不十分でしたのでご説明します。 ******************************************************* Dim frm As New form01 '新しく展開するフォーム '指定したフォームに引数を渡す(渡す数字) frm.SetFilter(1) ' frm.ShowDialog(Me) 'ここで最初のフォームを展開してます。 ******************************************************** わかった事は、最初の呼び出し元(親)のフォームにはテキストBOXへの書き込みは出来ました。 しかし、2階層目以降から書き込めるのは自分のフォームと大元のフォームのみでした。 試しに上行の、引数を渡すのは問題なくできました。 結局、変数定義をせずに form1.ShowDialog(Me) にすることで解決しました。 ありがとうございました。 なぜ? なのかが不明です。 Dim定義は既に多く使っているので・・不安です。 理由がお解かりでしたら、ご指導頂けると嬉しいです。
お礼
Korinさんこんにちは。 ご回答ありがとうございます。 インスタンスについて勉強が必要のようですね。 私の今までの概念とたいぶ違うみたいです。 今から頑張ってみます。 色々できるのですね。とても「難しい」ですが面白いです。 Ownerプロパティの方は早速試してみます。 本当にありがとうございました。