|   | 
 
|  
 .NET TIPS 
非アクティブのままサブ・フォームを表示するには?[2.0のみ、C#、VB]
デジタルアドバンテージ 遠藤 孝信 
2006/09/01 | 
  | 
 
 
 
 | 
 Windowsフォームでは、メイン・フォームから別のフォームを開くと、通常は新しく開いた方のフォーム(以下、サブ・フォーム)がアクティブになる。
 しかしメイン・フォームでの作業が中断されないように、サブ・フォームをアクティブにせずに(非アクティブのまま)開きたい場合がある。例えば、参照情報を表示するためのポップアップ・ウィンドウや、ドロー・ツールにおけるツール・パレットなどだ。
 このような場合には、サブ・フォームを表示する前にそのフォームのShowWithoutActivationプロパティをfalseに設定しておくことにより、フォームをアクティブにせずに表示することができる(デフォルト値はtrue)。
 このプロパティは.NET Framework 2.0でFormクラス(System.Windows.Forms名前空間)に新しく追加されものだ。
■オーバーライドによるプロパティの設定
 ただしShowWithoutActivationプロパティは読み出し専用であるため、フォームを作成してからプロパティを設定するような通常の方法では値を設定できない。
 このプロパティにtrueを設定するには、サブ・フォームとなるフォームでShowWithoutActivationプロパティの定義をオーバーライドし、そのGetアクセサでtrueを返すようにする必要がある*。
* このような仕様になっているのは、フォームの表示後にShowWithoutActivationプロパティを設定するような無意味なコードを記述させないようにするためだと思われる。 
 | 
■ShowWithoutActivationプロパティを利用したサンプル・プログラム
 以下のコードは、Visual Studio 2005で新規作成したWindowsアプリケーションのプロジェクトにサブ・フォーム(Form2)を追加し、そのフォームでShowWithoutActivationプロパティをオーバーライドして、このプロパティをtrueに設定している例だ。
 
// サブ・フォーム(Form2.cs) 
 
using System; 
using System.Windows.Forms; 
 
namespace WindowsApplication1 { 
  public partial class Form2 : Form { 
    public Form2() { 
      InitializeComponent(); 
    } 
 
    // ShowWithoutActivationプロパティのオーバーライド 
    protected override bool ShowWithoutActivation { 
      get { 
        return true; 
      } 
    } 
  } 
} 
 | 
 
 
 
' サブ・フォーム(Form2.vb) 
 
Public Class Form2 
  ' ShowWithoutActivationプロパティのオーバーライド 
  Protected Overrides ReadOnly Property ShowWithoutActivation() As Boolean 
    Get 
      Return True 
    End Get 
  End Property 
End Class 
 | 
 
 
 | 
| ShowWithoutActivationプロパティをtrueに設定する記述例(上:C#、下:VB) | 
 ここでは例として、メイン・フォーム(Form1)で[Enter]キーが押されるたびにこのサブ・フォームを開くようにするために、以下のようにメイン・フォームのOnKeyDownメソッドをオーバーライドしてみよう。
 
// メイン・フォーム(Form1.cs) 
 
using System; 
using System.Windows.Forms; 
 
namespace WindowsApplication1 { 
  public partial class Form1 : Form { 
    public Form1() { 
      InitializeComponent(); 
    } 
 
    // OnKeyDownメソッドのオーバーライド 
    protected override void OnKeyDown(KeyEventArgs e) { 
      if (e.KeyCode == Keys.Enter) { 
        Form2 f2 = new Form2(); 
        f2.Show(); // サブ・フォームの表示 
      } 
    } 
  } 
} 
 | 
 
 
 
' メイン・フォーム(Form1.vb) 
 
Public Class Form1 
  ' OnKeyDownメソッドのオーバーライド 
  Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs) 
    If e.KeyCode = Keys.Enter Then 
      Dim f2 As New Form2() 
      f2.Show() ' サブ・フォームの表示 
    End If 
  End Sub 
End Class 
 | 
 
 
 | 
| ShowWithoutActivationプロパティをtrueに設定する記述例(上:C#、下:VB) | 
 プログラムを実行してメイン・フォームで[Enter]キーを連打すれば、アクティブ・ウィンドウが切り替わることなく、連続してサブ・フォームが開けるのを確認できるはずだ。
 
利用可能バージョン:.NET Framework 2.0のみ 
カテゴリ:Windowsフォーム 処理対象:フォーム 
使用ライブラリ:Formクラス(System.Windows.Forms名前空間)
 | 
 
|  
 | 
 
generated by  
 | 
 
 
 | 
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間