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

DOBON.NET

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

例えば、Internet Exploreのページ検索ダイアログはモードレスですが、メインウィンドウの後ろに隠れることはありません。このようなモードレスのフォームを表示するには、下の例のように、そのフォームがメインフォーム(モードレスフォームを表示するフォーム)の所有となるように設定します。

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

また、Form1から所有を解除したいときは、次のようにRemoveOwnedFormメソッドを使用します。

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