• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB2008で親フォームから子フォームを開いたときの処理で)

VB2008で親フォームから子フォームを開いたときの処理でノードの追加ができません

このQ&Aのポイント
  • VB2008で親フォームから子フォームを開いたときの処理で、ノードの追加ができません。
  • 親フォームから子フォームを開いて、子フォーム画面ロード時にTreeViewにノードを追加する処理を行おうとしていますが、ノードの追加ができません。
  • 別のモジュールでノードを追加させる方法を探しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

フォームオブジェクトを引数にして渡してあげましょう Module Module1   Public Sub MP_hogeload(ByVal frm As Form2)     With frm       .trehoge.Nodes.Add("標準モジュールで追加")     End With   End Sub End Module Public Class Form2   Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     MP_hogeload(Me)   End Sub End Class

ryuuzakika
質問者

お礼

ご回答ありがとうございます。 引数で渡すようにすれば出来るようになりました。 ただ、Public Sub MP_hogeload(ByVal frm As Form2) という形では、共通性が損なわれるため 下記のようにしました。 ありがとうございました。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Using frmAct As New Form2 frmAct.ShowDialog() End Using End Sub End Class Public Class Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load MP_hogeload(Me.trehoge) End Sub End Class Module Module1 Public Sub MP_hogeload(ByVal pi_form As TreeView) pi_form.Nodes.Add("hoge") End Sub End Module

その他の回答 (3)

回答No.3

通るすがるです。 なるほど、質問の意味が解りました。 実際やってみたんですけど、エラーにはならないですね! ただ、treeviewには何も表示されませんから、モジュール上の form2というメモリ上の領域は、生成したform2とは別の領域なのでは ないでしょうか? そもそも、モジュールというのはvb6プログラマのための残している 機能であって、オブジェクト指向の考え方ではないですよね!。 上記のように分割するのでしたらclass化するものだと思うのですけど。 またvb2005環境で新規追加するときの新しい項目の追加メニュー またはテンプレートには存在してたと思いましたけどvb2008では、 そこから除去されておりおそらく、ゆくゆくはなくなる方向ではないかと 思います。(ここは、私個人の想像ですけど)

ryuuzakika
質問者

お礼

回答ありがとうございます。 おっしゃる通り領域の違いが表示できない理由のようでした。 ありがとうございます。

  • rk_les
  • ベストアンサー率63% (23/36)
回答No.2

おはようございます。 Moduleを使いたいということですがこのプログラムを見る限り使う利点が見出せないのですが・・・ ちなみに補足説明に書いたコードで動きます。確認済みです。 エラーが出るのであればエラー名を御願いします。

ryuuzakika
質問者

お礼

回答ありがとうございます。 エラーは特に出ていないです。 Moduleを使う理由は、ノード追加のロジックをほかの部分でも使用していて 共通化するためです。 自分のところではノードの追加がいまだに出来ない状態です。 何か設定の違いみたいなのが存在するのでしょうか?

回答No.1

はじめまして、通るすがるです。 上記のコード 普通にできたよ? 親フォーム Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Using frmAct As New Form2 frmAct.ShowDialog() End Using End Sub End Class 子フォーム  Public Class Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load MP_hogeload() End Sub Public Sub MP_hogeload() trehoge.Nodes.Add("hoge") End Sub End Class

ryuuzakika
質問者

お礼

ご回答ありがとうございます。 上記のは動きました。 自分のした質問は子フォームで Public Sub MP_hogeload() を宣言するのではなく、 モジュールを新たに作成して 宣言する方法です。 下のような形です。 親フォーム Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Using frmAct As New Form2 frmAct.ShowDialog() End Using End Sub End Class 子フォーム Public Class Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load MP_hogeload() End Sub Public Sub MP_hogeload() Me.trehoge.Nodes.Add("hoge") End Sub End Class モジュール Module Module1 Public Sub MP_hogeload() With Form2 .trehoge.Nodes.Add("hoge") End With End Sub End Module という形です。 これだと動かないんです。 ちょっとわかりにくい書き方だったようで、 申し訳ありませんでした。 また回答いただけると幸いです。

関連するQ&A

専門家に質問してみよう