.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]キーを連打すれば、アクティブ・ウィンドウが切り替わることなく、連続してサブ・フォームが開けるのを確認できるはずだ。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Windowsフォーム 処理対象:フォーム
使用ライブラリ:Formクラス(System.Windows.Forms名前空間)

この記事と関連性の高い別の.NET TIPS
サブ・フォームからメイン・フォームのコントロールに値を設定するには?
ダイアログ・ボックスの開始表示位置を設定するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH