モードレスのフォームが、あるフォームの背後に隠れないようにする例えば、Windowsの「メモ帳」で検索する時に表示される「検索ダイアログ」はモードレスですが、メインウィンドウの後ろに隠れることはありません。このように、モードレスダイアログがメインフォームの後ろに隠れないようにするには、そのダイアログをメインフォームが所有するようにします。 .NET Framework 2.0からは、Showメソッドでダイアログを表示させる時に、所有者となるフォームを指定することができます。 以下のコードはフォームクラスに書かれているものとして、自分のフォームに隠れないようにForm1をモードレスで表示しています。 '表示させるフォームのインスタンスを作成 Dim f As New Form1() '自分を所有者としてForm1をモードレスで表示する f.Show(Me) //表示させるフォームのインスタンスを作成 Form1 f = new Form1(); //自分を所有者としてForm1をモードレスで表示する f.Show(this); .NET Framework 1.1以前や、すでに表示されているモードレスダイアログを所有する場合は、AddOwnedFormメソッドやOwnerプロパティを使います。 '表示させるフォームのインスタンスを作成 Dim f As New Form1() 'Form1を所有する Me.AddOwnedForm(f) 'または次のようにする 'f.Owner = Me 'Form1をモードレスで表示する f.Show() //表示させるフォームのインスタンスを作成 Form1 f = new Form1(); //Form1を所有する this.AddOwnedForm(f); //または次のようにする //f.Owner = this; //Form1をモードレスで表示する f.Show(); なお、フォームの所有について「Form.AddOwnedForm メソッド」には、次のように書かれています。 所有を解除する所有を解除したいときは、RemoveOwnedFormメソッドを使用するか、OwnerプロパティにNothing(C#では、null)を設定します。 If Not Me.Owner Is Nothing Then 'フォームの所有を解除する Me.Owner.RemoveOwnedForm(Me) 'または次のようにする 'Me.Owner = Nothing End If if (this.Owner != null) { //フォームの所有を解除する this.Owner.RemoveOwnedForm(this); //または次のようにする //this.Owner = null; } 所有しているフォームを取得するあるフォームが所有しているフォームは、Form.OwnedFormsプロパティで取得できます。OwnedFormsプロパティはフォームの配列を返します。 '所有しているフォームのTextを列挙する Dim f As Form For Each f In Me.OwnedForms Console.WriteLine(f.Text) Next //所有しているフォームのTextを列挙する foreach (Form f in this.OwnedForms) { Console.WriteLine(f.Text); }
|
|
Copyright(C) DOBON!. All rights reserved.
|