サイズ変更可能なダイアログの初期表示サイズを変更するには?

解決


モモ  2009-01-29 19:44:36  No: 145721

VB.NET2005です。
サイズ変更可能なダイアログ(BorderStyle=Sizable)を表示(ShowDialog)させています。
ダイアログ表示後にマウス等でサイズの変更をすることは可能なのですが、
フォームロード時にWidthやHeightに固定値をセットしても
初期表示時の画面サイズが変わりません。
表示元画面のサイズに合わせて、ダイアログのサイズも
変更したいのですが、何か方法はございますでしょうか。
教えて下さい。
何卒よろしくお願い申し上げます。


魔界の仮面弁士  2009-01-29 20:27:56  No: 145722

> (BorderStyle=Sizable)
FormBorderStyle ではなく?

> フォームロード時にWidthやHeightに固定値をセットしても
> 初期表示時の画面サイズが変わりません。
こういう事でしょうか。当方では変化しましたけれども。

'=== Form1 ===
Partial Public Class Form1
    Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Using F As New Form2()
            F.ShowDialog(Me)
        End Using
    End Sub
End Class

'=== Form2 ===
Partial Public Class Form2
    Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
        Me.Width = 600
        Me.Height = 100
    End Sub
End Class

なお、Load イベントで Width や Height をセットするのはおすすめしません。

何故なら、たとえば StartPosition が CenterScreen に設定されていた場合、
表示位置が既に確定した後ですので、そこからサイズを変更すると、
本来の表示位置とは異なってしまうからです。

初期サイズを設定するなら、Load イベントの発生前の方が良いかと。
  Protected Overrides Sub OnLoad(ByVal e As EventArgs)
    Me.Width = 600
    Me.Height = 100
    MyBase.OnLoad(e)  'サイズ設定後に Load 処理を行う
  End Sub

# あるいは、New のコンストラクタ(InitializeComponent の実行直後)でも可。


モモ  2009-02-03 18:26:41  No: 145723

このたびはお返事ありがとうございました。
ロード時に実際はサイズ変更できておりました。
魔界の仮面弁士様にご指摘頂いた通り、
ロード時にサイズ指定を行っていたため、
呼び出し側のフォームサイズに合わせた
ダイアログの最適な表示サイズや位置を算出する処理で、
思い通りの算出結果が出ておりませんでした。
それがたまたまサイズが変更されていないように
見えておりました。
Load時ですとCenterScreenで位置が変わってしまった後で
算出していたからなんですね。
ご指摘通り、Load イベントの発生前に算出、表示することで
目的の動作が実現しました。
ちなみにBorderStyleではなくFormBorderStyleでした。
いつもご教授頂いて助かっています。
本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加