DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

モードレスのフォームが、あるフォームの背後に隠れないようにする

例えば、Windowsの「メモ帳」で検索する時に表示される「検索ダイアログ」はモードレスですが、メインウィンドウの後ろに隠れることはありません。このように、モードレスダイアログがメインフォームの後ろに隠れないようにするには、そのダイアログをメインフォームが所有するようにします。

.NET Framework 2.0からは、Showメソッドでダイアログを表示させる時に、所有者となるフォームを指定することができます。

以下のコードはフォームクラスに書かれているものとして、自分のフォームに隠れないようにForm1をモードレスで表示しています。

VB.NET
コードを隠すコードを選択
'表示させるフォームのインスタンスを作成
Dim f As New Form1()
'自分を所有者としてForm1をモードレスで表示する
f.Show(Me)
C#
コードを隠すコードを選択
//表示させるフォームのインスタンスを作成
Form1 f = new Form1();
//自分を所有者としてForm1をモードレスで表示する
f.Show(this);

.NET Framework 1.1以前や、すでに表示されているモードレスダイアログを所有する場合は、AddOwnedFormメソッドOwnerプロパティを使います。

VB.NET
コードを隠すコードを選択
'表示させるフォームのインスタンスを作成
Dim f As New Form1()
'Form1を所有する
Me.AddOwnedForm(f)
'または次のようにする
'f.Owner = Me
'Form1をモードレスで表示する
f.Show()
C#
コードを隠すコードを選択
//表示させるフォームのインスタンスを作成
Form1 f = new Form1();
//Form1を所有する
this.AddOwnedForm(f);
//または次のようにする
//f.Owner = this;
//Form1をモードレスで表示する
f.Show();

なお、フォームの所有について「Form.AddOwnedForm メソッド」には、次のように書かれています。
「フォームが別のフォームによって所有されている場合は、所有している側のフォームと連動して最小化したり閉じたりします。たとえば、Form2 がフォーム Form1 に所有されている場合、 Form1 が閉じられるか最小化されると、 Form2 も閉じられるか最小化されます。また、所有される側のフォームを所有する側のフォームの背面に表示することはできません。所有されているフォームは、検索ウィンドウや置換ウィンドウなど、所有側のフォームが選択されているときにその背面に表示できないようにするウィンドウに使用できます。」

所有を解除する

所有を解除したいときは、RemoveOwnedFormメソッドを使用するか、OwnerプロパティにNothing(C#では、null)を設定します。

VB.NET
コードを隠すコードを選択
If Not Me.Owner Is Nothing Then
    'フォームの所有を解除する
    Me.Owner.RemoveOwnedForm(Me)
    'または次のようにする
    'Me.Owner = Nothing
End If
C#
コードを隠すコードを選択
if (this.Owner != null)
{
    //フォームの所有を解除する
    this.Owner.RemoveOwnedForm(this);
    //または次のようにする
    //this.Owner = null;
}

所有しているフォームを取得する

あるフォームが所有しているフォームは、Form.OwnedFormsプロパティで取得できます。OwnedFormsプロパティはフォームの配列を返します。

VB.NET
コードを隠すコードを選択
'所有しているフォームのTextを列挙する
Dim f As Form
For Each f In Me.OwnedForms
    Console.WriteLine(f.Text)
Next
C#
コードを隠すコードを選択
//所有しているフォームのTextを列挙する
foreach (Form f in this.OwnedForms)
{
    Console.WriteLine(f.Text);
}
  • 履歴:
  • 2012/4/8 Showメソッドに所有側のフォームを指定する方法を追記。OwnedFormsプロパティの情報を追記。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。