.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
サブ・フォームからメイン・フォームのコントロールに値を設定するには?[C#、VB]
Visual Basic 2005でスプラッシュ・スクリーンの表示時間を変更するには?
Windowsアプリケーションの位置やサイズを保存するには?
ダイアログ・ボックスの開始表示位置を設定するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間