- PR -

複数MDI子フォームから1つを選択するには

投稿者投稿内容
eguchi
会議室デビュー日: 2005/09/09
投稿数: 6
投稿日時: 2005-09-09 16:28
MDI子フォームの勉強を始めたのですが
わからないので教えてください。

MDI子フォームを複数開いた状態から
あるフォームをアクティブにしたいと思っています。

具体的には

Dim frmChild As New Form1()
frmChild.MdiParent = Me
frmChild.Show()

Dim frmChild As New Form2()
frmChild.MdiParent = Me
frmChild.Show()

Dim frmChild As New Form3()
frmChild.MdiParent = Me
frmChild.Show()

と3つのMDI子フォームを開いた後で
Form1のMDI子フォームをアクティブにしたいと思っています。

初歩的かもしれませんがよろしくお願いします。


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-09 16:34
こんにちは、じゃんぬ です。

引用:

3つのMDI子フォームを開いた後で
Form1のMDI子フォームをアクティブにしたいと思っています。
初歩的かもしれませんがよろしくお願いします。


どこか別に参照を取っておくと解決するでしょう。

冗長ですが、MDI 子フォームをすべて取得 して、
列挙したフォームから識別することも可能でしょう。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-09-09 16:40
お世話になります。

For Each f As Form In Me.MdiChildren
  If f.GetType Is GetType(Form1) Then
    f.Activate()
    Exit For
  End If
Next
でいけませんか?

# これはじゃんぬさんの仰る、冗長な方法の方に当たると思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-09 16:52
引用:

なおこ(・∀・)さんの書き込み (2005-09-09 16:40) より:
お世話になります。

For Each f As Form In Me.MdiChildren
  If f.GetType Is GetType(Form1) Then
    f.Activate()
    Exit For
  End If
Next
でいけませんか?

# これはじゃんぬさんの仰る、冗長な方法の方に当たると思います。


それと、型が同じのフォームが複数開いてるのであれば使えません。

片方が GetType メソッドだと違和感があるがや。
(一方がメソッドで一方がキーワードだから、気持ちが悪いというか..)
VB だと素直に TypeOf 使いません?

コード:

For Each hForm As Form In Me.MdiChildren
    If TypeOf hForm Is Form1 Then
        hForm.Activate()
        Exit For
    End If
Next hForm




_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-09-09 17:02
引用:

それと、型が同じのフォームが複数開いてるのであれば使えません。



Name プロパティってのはどうですか。
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-09-09 17:14
引用:

囚人さんの書き込み (2005-09-09 17:02) より:
Name プロパティってのはどうですか。



Nameプロパティでも同じじゃないですか?
hForm.Nameだと、"Form1"が取れるので…。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-09-09 17:19
引用:

Nameプロパティでも同じじゃないですか?
hForm.Nameだと、"Form1"が取れるので…。



例えば、子ウィンドウが全部 DocumentForm 型だったりしたらどうですか?
Word みたいなイメージだと動的に子ウィンドウが作られるので、そんな感じでになると思います。
Name プロパティにドキュメントの名前を入れるなりしていたら、メニューから選択できるとかできますね。

#編集
今の Word はちがいますね・・・。「Excel みたいな」^^;


[ メッセージ編集済み 編集者: 囚人 編集日時 2005-09-09 17:21 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-09 17:20
引用:

なおこ(・∀・)さんの書き込み (2005-09-09 17:14) より:

Nameプロパティでも同じじゃないですか?
hForm.Nameだと、"Form1"が取れるので…。


一応、実行時に決定することもできます。
が、Name プロパティは、そういうことに使用する「識別子」ではないので、
CODING HORROR になるような気がします。

第三者が見て、すぐにわからないんじゃないかな?


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)