MDI親ホームからMDI子ホームを操作したいのですが

タグの編集
投稿者 大池  (社会人) 投稿日時 2010/7/9 15:12:17
いつもご指導をいただきありがとうございます。
XPでvb2008を勉強をしています。
MDI親ホームからMDI子ホームのコンボボックスに文字を挿入するために次のようなテストをしています。
MDI子ホームにPanel1、ComboBox1を張り付けましてMDI親ホームからつぎの操作をし、
一応期待通りの結果がでました。しかし、あまりにも回りくどいですが、これでいいのでしょうか?
他に例えばMy.???のような簡単な方法があるのではと期待しながらお尋ねする次第です。
それからPanel1の中に張り付けたコントロールを取得するにはどのようにすればいいのでしょうか?
ご教授のほどよろしくお願いいたします。

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
        Dim actChild As Form = ActiveMdiChild
        For i As Integer = 0 To actChild.Controls.Count - 1
            'Debug.Print(i.ToString)
            Select Case actChild.Controls.Item(i).Name
                Case "Panel1"
                    Dim pnl As Panel = ActiveMdiChild.Controls(i)
                    pnl.Enabled = True
                Case "ComboBox1"
                    Dim cbo0 As ComboBox = ActiveMdiChild.Controls(i)
                    cbo0.Text = "2010"
             End Select
        Next
     End Sub

投稿者 cupid  (その他) 投稿日時 2010/7/12 10:51:45
返答でないですが、── 素朴な疑問として、MDI を何に使うつもりでしょうか?
MDI と言うと、Photshopなど画像編集ソフトで、複数画像を同時に表示するとか、
または、Excel で、複数の xls ファイルを同時表示しているとか、そういう用途が
多いのでしょう。 何となく、情報表示板的な使い方が多いのでは? 確かに、
MDI 子フォームにもコントロールをつけ、操作できるようになっているようですが。
VB6時代に、MDI を使った事ありますが、親フォーム側の制約が多いと感じた為、
その後は、感心が薄れるようになりました。 あくまでも私自身の事情からです。
投稿者 るきお  (社会人) 投稿日時 2010/7/12 13:14:18
こんにちは。

大池さんのプログラムでしたら次のように書くこともできますよ。
この例ではMDI子フォームはForm2というクラス名です。

  
Dim child As Form2 = Me.ActiveMdiChild

child.Panel1.Enabled = True
child.ComboBox1.Text = "2010"


おっしゃられるように大池さんの書き方はちょっと面倒なので、
だいたいの人はこのように書いているのではないかと思っています。
投稿者 大池  (社会人) 投稿日時 2010/7/28 22:34:46
こんにちわ
自己都合でしばらくPCから離れていまして大変失礼いたしました。お許しください。

cupid様
ご指摘ありがとうございます。勉強中でしていまテーマとしていますのは
あるデータベース(といいましてもcsvファイルの集合です)の作成とその加工したものを表示、印刷しようとしています。MDI親フォームに「データ入力・訂正」、「A図」、「A表」・・・の作業メニューとファイル一覧リストボックスを設けています。したがってご指摘のように「情報表示板的」なものが大半ですが、「データ入力・訂正」ではこの画面子フォームを表示した後ファイル(又は新規)を選択しますので親ホームから子ホームを操作することになります。もっとスマートな方法がありましたらご指導のほどよろしくお願いいたします。

るきお 様
ありがとうございます。勉強がずいぶん進んだような気がします。
今後ともよろしくお願いいたします。