|
.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に設定する。これはモーダル・ダイアログでもモードレス・ダイアログでも有効である。
|
generated by
|
|
Insider.NET 記事ランキング
本日
月間