TabControlとMDIの子フォームを関連づけるには?

解決


たけっち  2006-05-29 22:10:55  No: 131610

環境
VB2005 express
WinXP SP2

お世話になります。
MDIフォーム+タブコントロールでタブブラウザを作ろうとしています。
タブの追加と子フォームの追加は出来たのですが、それらを
関連づける方法がわかりません。

やりたいことは、タブをクリックしたときに関連づけられたフォームを
アクティブにしたり、子フォームをアクティブにしたときに、タブの選択を
切り替えたいと思います。このためにはお互いに相手を特定出来ないと
いけないわけですが、これはどのように行うのがよいのでしょうか?

MenuStripのMDIWindowListItemの指定で、メニューに子フォームが追加され
選択すればアクティブになりますが、あれは内部でどうやってフォームを
特定しているのでしょうか? 同じような仕組みだと思ったのですが。

あとタブをクリックしたときに子フォームに指示を出したいのですが、
MDIChild(インデックス).Webbrowser1.プロパティ = "ほにゃらら"
みたいなことをしたいと思っています。
これも上記が解決すれば出来ると思っています。
アドバイスをよろしくお願いします。

今はこのようなコードです。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim tab As New TabPage
        Dim ChildForm As New IEChild'子フォーム

        TabControl1.TabPages.Add(tab)
        ChildForm.MdiParent = Me

        ’ここでタブとフォームを関連づけたい。
        
        tab.Text = ChildForm.Text
        TabControl1.SelectedTab = tab
        ChildForm.Show()

    End Sub


特攻隊長まるるう  2006-05-30 20:20:34  No: 131611

[VB.NET2003]の質問なら過去ログ検索『別フォーム』とかで。。。

フォームを表示する時は、変数を宣言して新しいインスタンスを生成
しますが、この時、変数には参照アドレスが格納されます。
  # この場合、変数を参照変数と呼んだりします。
サンプルコードでは以下の部分です。
>        Dim ChildForm As New IEChild'子フォーム
この変数を保持しておけば、生成したオブジェクトを識別できます。
グローバルな変数で宣言してください。
  # タブの数と同じ大きさの配列にすればいいんじゃないですか?

子フォームを操作したい場合は、この参照変数に命令します。
子フォームにアクセス可能なプロパティやメソッドを用意し、
実行したいプログラムを記述してください。
先ほどの参照変数から用意したプロパティやメソッドを実行してください。


たけっち  2006-06-02 00:56:20  No: 131612

特攻隊長まるるうさんへ

こんにちは。レスありがとうございます。

>この変数を保持しておけば、生成したオブジェクトを識別できます。
>グローバルな変数で宣言してください。

参照アドレスが格納されるのですね。
この変数を保持するようにしました。

タブをクリックしたときに関連のフォームを呼び出すために、
タブの生成時にタブにユニークの名前をつけ、それをキーにして
Collectionに登録することにしました。

子フォームにはプロパティとしてタブへの参照を登録しておいて、
子フォームを閉じたときにタブも閉じるなどができるようになりました。

>子フォームを操作したい場合は、この参照変数に命令します。

これは良く考えればそうですよね。難しく考えすぎてました。
これで先にすすめます。ありがとうございました。


たけっち  2006-06-02 00:57:04  No: 131613

すいません。解決を付け忘れてました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加