• ベストアンサー

VisualBasic.NET MDIアプリの子フォーム間のやりとり

最近VisualBasic.net(2003)を始めた初心者です。 MDIを使ったアプリケーションを作りたいと考えているのですが なかなか進まなくて困っています。 frmA(親フォーム) frmB・formC(子フォーム)を作成して 表示させた後 frmBの中のラベルのテキストや表示を frmCのボタンによって変更したいのですが なかなかうまくいきません。 親フォームからではできるみたいなのですが 子フォームどうしでは できないのでしょうか? ぜひ アドバイスをよろしくお願いいたします。 (説明不足なところは申し訳ございません。)

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

  • ベストアンサー
  • ape5
  • ベストアンサー率57% (85/148)
回答No.2

以下のサンプルはあくまで一つの例であり、もっといい方法があるかもしれません。参考程度までに ============================================================== Public Class Form1 Inherits System.Windows.Forms.Form Private frm2 As Form2 Private frm3 As Form3 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.IsMdiContainer = True frm2 = New Form2() frm3 = New Form3() ’各フォームのプロパティで登録 frm2.frmMDI_3 = frm3 frm3.frmMDI_2 = frm2 frm2.MdiParent = Me frm3.MdiParent = Me frm2.Show() frm3.Show() End Sub End Class --------------------------------------------------------------- Public Class Form2 Inherits System.Windows.Forms.Form Private frmMDI3 As Form3 ’プロパティの設定 Public Property frmMDI_3() As Form3 Get Return frmMDI3 End Get Set(ByVal Value As Form3) If Not Value Is Nothing Then frmMDI3 = Value End If End Set End Property End Class --------------------------------------------------------------- Public Class Form3 Inherits System.Windows.Forms.Form Private frmMDI2 As Form2 ’プロパティの設定 Public Property frmMDI_2() As Form2 Get Return frmMDI2 End Get Set(ByVal Value As Form2) If Not Value Is Nothing Then frmMDI2 = Value End If End Set End Property Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ’ここでもう一方の子フォームのテキストボックスの書き換え frmMDI2.TextBox1.Text = TextBox1.Text End Sub End Class ===============================================================

key_kun
質問者

お礼

回答ありがとうございます。 こんなに便利なコードの書き方があったのを初めて知りました。 少しずつ覚えていきたいと思います。

その他の回答 (1)

  • Hardking
  • ベストアンサー率45% (73/160)
回答No.1

親画面Aのみ子画面B、Cのオブジェクトインスタンスが参照可能 という状態だからです。 子画面間で相互操作したいのであれば frmB,frmCをPublic変数に変更し、画面コントロールを 画面オブジェクト変数で修飾する。 例.frmB.txtWORK.text = "AAAAA"

key_kun
質問者

補足

早速回答ありがとうございます。 >frmB,frmCをPublic変数に変更し、画面コントロールを >画面オブジェクト変数で修飾する。 どのようにしたら よいのでしょうか? 勉強不足ですみません。

関連するQ&A

  • MDI:親フォームと子フォームを別EXEで実装するには

    MDIでアプリケーションを作成したいと思っています。 その時に子フォームを親フォームとは別EXEで作りたいと思っています。 例えば 親フォームのボタンを押すと、子フォームEXEが起動し、親フォーム内に表示される。 このようなことは出来ますか? 出来るのでしたら、どうしたらよろしいでしょうか。 教えてください。

  • MDIフォームでのモーダル

    こんにちわ。 visualstudio2005(vb.net)で開発を行っています。 MDIフォームを使ってシステムを作成しています。 親フォームの中にフォーム1を表示させそのフォーム1からボタンを押すとフォーム2が表示されるという仕様です。 希望としてはフォーム2を起動中はフォーム1は利用不可にしたい(モーダルのような感じで表示させたい)のですが、MDIではShowDialogは無理なようです。 MDIフォームでこういったことを実現するのは無理なのでしょうか? (VisualStudioの[ツール]-[オプション]の画面を参考に見てもモーダルのフォームはMDIから外れたエリアで表示されている気がします。) 解決策や代替の手段等ありましたらおしえていただけませんでしょうか? お忙しいところ大変申し訳ありませんがよろしくお願いいたします。

  • MDI親フォームで子フォーム開放を知る

    はじめまして。VB.NET2005でプログラミングをしている初心者です。 MDIフォームのAPを作成しています。 MDI親フォーム1つと子フォームが2つあるとします。 親フォームから子フォーム2つをShowします。 子フォーム1を閉じたときに、親フォーム内で子フォーム1が閉じられた事を知るすべは無いのでしょうか。 親フォーム内で起こるイベントでどの子フォームが閉じられたかを得たいと思っています。 どなたか分かる方いらっしゃいましたらご教授ください。 宜しくお願い致します。

  • MDIの親フォームから子フォームの操作

    VB2010のMDIの親フォームからの操作に関してです。 MDIで設定された親フォームのMenuStripから子フォームのTextBox1のTextの値をMsgBoxで取得したいのです 出来る事なのかどうか分からないですが、初歩的な質問でご迷惑をお掛けします・・・

  • VB.NET MDI 親子フォームのメニューをマージしたくない

    MDI アプリケーションを作成しています。 親フォーム、子フォームともにメニューを持っています。 子フォームを表示すると、親子のメニューがマージしてしまうのですが、子フォームのメニューは、子フォームに表示するようにできないのでしょうか? よろしくお願い致します。

  • MDI親フォームでのキー入力監視

    はじめまして。 VB6.0 SP5で開発を行っております。 子フォームが開いていない状態のMDI親フォームで、F1~F12のファンクションキーを押下したら、それぞれ対応した子フォームが開くようにしたいのですが、MDI親フォームでは、KeyUpやKeyDownのイベントが発生しないため、キー入力監視ができません。 上記のような事を実現させるためには、どのようにすればよろしいのでしょうか。 MDI親フォームには、PictureBoxを貼りその中にボタンを設置して、マウスクリックでも子フォームを開くようにしています。PictureBoxでKeyイベントを取得しようとしましたが、ボタンをクリックして、子フォームを開き、その子フォームを閉じた後(子フォームのUnLoadイベント内で親フォームのPictureBoxにSetFocusしています)、フォーカスがどこかへ行ってしまい、イベントがとれません。 常に、子フォームを開いている状態で、子フォームでKeyイベントを取得するしかないのでしょうか。その場合、子フォームを閉じた時に、別のフォーム(Keyイベント取得用フォーム)を自動的に開く方法はありますでしょうか。 長文となり申し訳ありません。 ご教授の程、よろしくお願い致します。 開発環境  OS:WindowsXP SP3  言語:VisualBasic6.0 SP5

  • VisualBasic6でドラック&ドロップのアプリを作成したい

    VisualBasic6で、作成したアプリケーションのフォーム上に、他のファイルをドラック&ドロップした場合に、 ファイル名をフォーム上やラベルに表示させたいのですが、参考になるソースはありますか?

  • VB6でMDIフォームを使用しています。

    VB6でMDIフォームを使用しています。 MDIフォームで下記プログラムを作成しました。 (1)ツールバー上のボタン1を押し、子フォームAを表示させました。   ※子フォームAの WindowState を「2-最大化」に事前設定し、ウィンドウは最大化して表示されました。 (2)子フォームAを表示した状態で、同じツールバー上にあるボタン2を押し、子フォームB(ダイアログ)を表示させました。   ※子フォームBの WindowState を「0-標準」、BorderStyleを「3-固定ダイアログ」に事前設定し、表示されました。(一般的なオプション画面みたいなもの) 問題点はその際、子フォームAのウィンドウが勝手に「最大化」から「標準」に変わってしまうことです。 これを回避する方法はないのでしょうか? 以上、宜しくお願いいたします。

  • 子フォームの情報を親フォームに利用する

    Visual C++初心者です。visual studio2005を使用しています。 まず親フォームで名前を入力させ、「次へ」を押すと子フォームが出て来ます。 そこで好きな食べ物を入力させて「決定」ボタンを押すと子フォームが閉じ、親フォームのテキストボックスに 「○○さん、こんにちは!好きな食べ物は●●ですね」というメッセージを表示させる・・・というフォームアプリケーションを作りたいのです。 子フォームの表示は分かるのですが、そこで入力させた情報を親フォームに反映させる方法が分かりません。 できれば初心者でも分かる回答をして頂ければ有難く思います。 よろしくお願いします。

  • MDI アプリケーションで

     VBの、アプリケーションウィザードでMDIテキストエディタが作れますよね。  それをいじってMDIの勉強してるんですが、今はそこで終了時に編集していながらまだ保存していないフォームを探して、コモンダイアログを表示させて保存させようとしています。  しかし、どうすればいいのか分かりません。  はじめは、フォームのキャプションかどこかに編集した印でも付けて、Formsを使ってそれを判断させようとも思ったのですが、開発途中で子フォームがもう一つ出来てしまい、それとごちゃごちゃになってしまう可能性が出てきました。  何とか、テキスト編集用の子フォームのみを判断させたいのですが、上手く出来ないものでしょうか。  特定の子フォームの数や番号を特定できるコマンドとかってVBにあるんですかね。あれば出来そうなんですが……何か良い方法があればお教えください。 ------------------- 開発環境 VB6.0(SP5) WIN2000

専門家に質問してみよう