.NET TIPS

ダイアログ・ボックスの開始表示位置を設定するには?

デジタルアドバンテージ 遠藤 孝信
2005/09/16

 「TIPS:Windowsフォームの開始表示位置を設定するには?」では、メインとなるフォームの開始表示位置を設定する方法について述べた。しかしWindowsアプリケーションでは、そのようなメイン・フォーム以外にもダイアログ・ボックスとしてフォームを利用する場合がある。

 本稿ではダイアログ・ボックス(以下では単に「ダイアログ」と表記する)の開始表示位置の設定についてまとめる。

デフォルトの開始表示位置

 ここでは、ダイアログとなるフォームとして、以下のような簡単なフォームを想定する(ダイアログの詳細については「TIPS:モーダル・ダイアログやモードレス・ダイアログを表示するには?」を参照していただきたい)。

public class MyDialogBox: Form
{
  public MyDialogBox()
  {
    this.Size = new Size(200, 200); // ウィンドウのサイズ
    this.Text = "ダイアログ・ボックス";
  }
}
Public Class MyDialogBox
  Inherits Form

  Public Sub New()
    Me.Size = New Size(200, 200) ' ウィンドウのサイズ
    Me.Text = "ダイアログ・ボックス"
  End Sub
End Class
ダイアログ・ボックスとなるフォーム(上:C#、下:VB.NET)

 このフォームのインスタンスを作成し、何の設定もせずにShowDialogメソッド(モーダル・ダイアログの場合。モードレス・ダイアログの場合にはShowメソッド)を呼び出した場合には、メイン・フォームの場合と同様に、Windowsによってその表示位置が決定される。これはフォームのStartPositionプロパティのデフォルト値がFormStartPosition.WindowsDefaultLocationとなっているためだ。

モーダル・ダイアログを親ウィンドウの中央に表示

 通常、モーダル・ダイアログの場合には、ダイアログ・ボックスを親フォームの中央に表示するのが一般的であり、そのための機能も用意されている。これには表示しようとするダイアログのStartPositionプロパティをFormStartPosition.CenterParentに設定すればよい。

MyDialogBox dlg = new MyDialogBox();
dlg.StartPosition = FormStartPosition.CenterParent;
dlg.ShowDialog(); // モーダル・ダイアログとして表示
Dim dlg As New MyDialogBox
dlg.StartPosition = FormStartPosition.CenterParent
dlg.ShowDialog()
モーダル・ダイアログを親フォームの中央に表示(上:C#、下:VB.NET)
 
親フォームの中央に表示されたモーダル・ダイアログ

 FormStartPositionプロパティの設定はダイアログ・ボックス(本稿の場合にはMyDialogBoxクラス)のコンストラクタでも記述できるが、通常はダイアログ・ボックスを開く親フォーム側で、その表示位置を決めるのが一般的だ。

モードレス・ダイアログを親ウィンドウの中央に表示

 モードレス・ダイアログを親フォームの中央に表示するには、自前で表示位置を算出し、ダイアログのLocationプロパティ(あるいはLeftプロパティとTopプロパティ)に設定する必要がある。このような任意の位置にダイアログを表示する場合には、まずStartPositionプロパティをFormStartPosition.Manualに設定しておかなければならない。

MyDialogBox dlg = new MyDialogBox();
dlg.StartPosition = FormStartPosition.Manual;
dlg.Left = this.Left + (this.Width - dlg.Width) / 2;
dlg.Top = this.Top + (this.Height - dlg.Height) / 2;
dlg.Owner = this; // 常に親ウィンドウの手前に表示
dlg.Show();// モードレス・ダイアログとして表示
Dim dlg As New MyDialogBox
dlg.StartPosition = FormStartPosition.Manual
dlg.Left = Me.Left + (Me.Width - dlg.Width) \ 2
dlg.Top = Me.Top + (Me.Height - dlg.Height) \ 2
dlg.Owner = Me ' 常に親ウィンドウの手前に表示
dlg.Show() ' モードレス・ダイアログとして表示
モードレス・ダイアログを親フォームの中央に表示(上:C#、下:VB.NET)
このコードでは、thisやMeは親フォームとなるフォームのインスタンスを参照している。

 表示位置を任意の位置に設定するこの方法は、モーダル・ダイアログに対しても有効である。

 なお前掲のTIPSで解説しているように、Locationプロパティ(あるいはLeftプロパティとTopプロパティ)は画面の左上隅が座標系の原点となるが、DesktopLocationプロパティにより表示位置を設定する場合には、デスクトップの表示領域の左上隅が原点となる。

 また、ダイアログを画面の中央に表示する場合には、メイン・フォームと同様に、StartPositionプロパティをFormStartPosition.CenterScreenに設定する。これはモーダル・ダイアログでもモードレス・ダイアログでも有効である。End of Article

カテゴリ:Windowsフォーム 処理対象:ウィンドウ
使用ライブラリ:Formクラス(System.Windows.Forms名前空間)
使用ライブラリ:FormStartPosition列挙体(System.Windows.Forms名前空間)
関連TIPS:Windowsフォームの開始表示位置を設定するには?
関連TIPS:モーダル・ダイアログやモードレス・ダイアログを表示するには?
 
この記事と関連性の高い別の.NET TIPS
Windowsフォームの開始表示位置を設定するには?
タスクバーにアイコンを表示させないようにするには?
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 記事ランキング

本日 月間