VB2008で親フォームから子フォームを開いたときの処理で
質問させて頂きます。
親フォームから子フォームを開いて、
子フォーム画面ロード時に、TreeViewにノードを追加する処理を行おうとするのですが、
ノードの追加ができません。
親フォームから子フォームの呼び出しの部分
Using frmAct As New form2
frmAct.ShowDialog()
end using
子フォームLoad処理
Private Sub F_Actresult_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call MP_hogeload() ←別のモジュールからサブルーチンを呼び出してノード処理を追加させる。
End Sub
外部サブルーチン
Public Sub MP_hogeload()
With form2
.trehoge.Nodes.Add("hoge")
end with
end sub
同じ子フォーム内に記述している場合は問題なく追加できています。
この開き方の場合、別のモジュールでノードを追加させる方法を探しています。
よろしくお願いいたします。
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
ご回答ありがとうございます。
引数で渡すようにすれば出来るようになりました。
ただ、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
No.3
- 回答日時:
通るすがるです。
なるほど、質問の意味が解りました。
実際やってみたんですけど、エラーにはならないですね!
ただ、treeviewには何も表示されませんから、モジュール上の
form2というメモリ上の領域は、生成したform2とは別の領域なのでは
ないでしょうか?
そもそも、モジュールというのはvb6プログラマのための残している
機能であって、オブジェクト指向の考え方ではないですよね!。
上記のように分割するのでしたらclass化するものだと思うのですけど。
またvb2005環境で新規追加するときの新しい項目の追加メニュー
またはテンプレートには存在してたと思いましたけどvb2008では、
そこから除去されておりおそらく、ゆくゆくはなくなる方向ではないかと
思います。(ここは、私個人の想像ですけど)
No.2
- 回答日時:
おはようございます。
Moduleを使いたいということですがこのプログラムを見る限り使う利点が見出せないのですが・・・
ちなみに補足説明に書いたコードで動きます。確認済みです。
エラーが出るのであればエラー名を御願いします。
回答ありがとうございます。
エラーは特に出ていないです。
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
ご回答ありがとうございます。
上記のは動きました。
自分のした質問は子フォームで
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
モーダルフォームとモードレス...
-
Excelにて、ユーザーフォームで...
-
エクセルVBAのフォームを最...
-
クリックイベントなのに、2回ク...
-
VBAでユーザーフォームを再表示...
-
ACCESSのフォーム、開くんです...
-
Access VBA コントロールの参照...
-
フォームウィンドウを最前面に...
-
コントロールの存在確認
-
C#でボタンクリックをキャンセル
-
(Excel+VBA)ユーザーフォームの...
-
Excel VBAでユーザーフォームだ...
-
Form_Load と Form_Activate の...
-
VBA コンボボックスとテキスト...
-
タスクバーにフォーム名を表示...
-
【VBAユーザーフォームで閉じる...
-
accessフォーム トルグ yes/n...
-
複数モニタ使用時のフォームの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォームのテキストボ...
-
エクセルVBAのフォームを最...
-
クリックイベントなのに、2回ク...
-
VBAでユーザーフォームを再表示...
-
Form_Load と Form_Activate の...
-
Microsoft Formsの「個人情報や...
-
ACCESSのフォーム、開くんです...
-
'ユーザーフォーム右上隅の[×...
-
フォームウィンドウを最前面に...
-
Hideについて(.NET)
-
モーダルフォームとモードレス...
-
ユーザーフォーム上に現在日時...
-
MSGBOXのフォント大きさ変更
-
Excelにて、ユーザーフォームで...
-
コントロールの存在確認
-
ユーザーフォームのラベルに時...
-
VBA(エクセル)のユーザー...
-
エクセルVBA フォーム上でOnkey...
おすすめ情報