- 題名: 親フォームと子フォームの操作方法について
- 日時: 2004/11/23 13:59:32
- ID: 7602
- この記事の返信元:
- (なし)
- この記事への返信:
- [7612] Re[1]: 親フォームと子フォームの操作方法について2004/11/24 8:56:03
- ツリーを表示
【1番目の】:
Form1で、ボタンのイベント処理に直接Form2やForm3の呼出しを記述せず、
別にpublicなメソッドとして作成してイベント処理では単にそれ(createForm2等)を
呼ぶようにして、
Form2では
directcast(Form2.MDIparent,Form1Class).createForm2()
とかすればできるかと。
MDIparentからアクセスするのは嫌だというのであれば、Form2にForm1への参照を保持する
フィールド(例えばpublic ManagerForm As Form1)を持たせて、
Form1側でnewした後にセットしておけばいい。
そうすれば、
me.ManagerForm.createForm2()
とかしてアクセスできる。
【2番目の】:
'Formは管理のためMDIの子を配列で保持するので、それを利用すればいいだけです。
'例えばプロパティを作るなら、以下のようなかたちでしょうか。
'(まぁ、わざわざプロパティにするまでもないのですが。)
Private ReadOnly Property hasMdiChildren() As Boolean
Get
If Me.MdiChildren.Length() <= 0 Then
Return False
Else
'@単純に配列に何か入っていたらtrueを返す。
Return True
'Aもしくは・・・
'配列が遅延で反応するんだという前提で処理する疑心暗鬼な人は、
'破棄されていないフォームが配列に残っているか確認・・・。
Dim exstC As Boolean = False
For Each f As Form In Me.MdiChildren
If f.IsDisposed <> True Then
exstC = True
Exit For
End If
Next
Return exstC
End If
End Get
End Property
こんなとこでしょうか。
分類:[.NET]
初めまして。
参考書片手にやっておりましたが、行き詰ったので質問させてください。
親フォーム(Form1)の中に子フォーム(Form2)を表示させています。
Form1プロパティ ⇒ IsMdiContainer ⇒ True
Form1(親)にメインメニューを作り、そこから新しい子フォーム(Form3)を開く方法は分かるんですが↓
Dim frmC As Form
frmC = New Form3()
'▼子フォームを最大化
frmC.WindowState = FormWindowState.Maximized
frmC.MdiParent = Me
frmC.Show()
Form2からForm3を開く方法が分かりません。
(Form2はボタンを使用してForm3を開こうとしてます)
重ねて質問なんですが、Form1の子ウィンドウに何も表示されていないとき、メインメニューにあるメニューの表示(Enabled)を消したい(False)にしたいんですが、子ウィンドウの情報の取り方ってありますか?
別サイトになりますが、親・子フォームの表示は↓こちらを参考にしました。
ttp://anetm.com/dev/tools/vbdotnet/112297.htm
宜しくお願いします。