.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アプリケーションの位置やサイズを保存するには?
文字列入力用ダイアログ・ボックスを簡単に開くには?(VB.NET関数活用)
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

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

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

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

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

@IT Sepcial
ソリューションFLASH