Entries

Formのサイズ その2

Formのサイズの最後に書いた画面の最大化のプログラムですが、
WindowStateプロパティを利用するとフォームが一度最大化されてから大きさ変更されてしまいます。
これ、PCによって動作がはっきり判ってしまうため、イマイチです。
で、最大化ボタンを押したときに発生するイベントとか無いのか探してみましたが、なさそうです。
WindowStateプロパティを変化したときに発生するイベントもなさそうです。

ということで、対策を考えてみました。
WindowStateプロパティは最大化し終わったときにMaximizedになるみたいですので、使うのをやめた方がよさそう。
そこで、利用するのはMaximumSizeプロパティMaximizedBoundsプロパティになりますかね。
どちらのプロパティもフォームの最大サイズを指定するプロパティになります。
MaximumSizeプロパティであれば、最大化ボタンを押してもフォームの端をドラッグして広げても指定したサイズを最大値とします。
一方、MaximizedBoundsプロパティは最大化ボタンを押したときは指定したサイズを最大値としますが、ドラッグしたときは範囲を超えていきます。
この問題は、FormBorderStyleプロパティを固定しておけば問題はなさそうです。

で、実際にどちらのパターンがいいのかと動作させてみました。
実験用のコードは以下のような感じです。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 Dim x, y As Integer
 x = Me.Size.Width - Me.ClientSize.Width
 y = Me.Size.Height - Me.ClientSize.Height
 'Me.MaximumSize = New Size(800 + x, 600 + y)
 Me.MaximizedBounds = New Rectangle(0, 0, 800 + x, 600 + y)
End Sub

WindowStateプロパティを使わず最大値を決める方法を取っています。
さらに、描画領域を800x600取るようにするため、タイトルバーやフォームの枠のサイズをフォームのサイズとクライアントサイズの差で求めています。
これを最大値として加えてあげれば決めた描画領域を確保することができます。

MaximumSizeプロパティにはWidthやHeightがありますが、これらには直接値を代入することができませんので、Size構造体を作成し設定してあげます。

MaximizedBoundsプロパティはRectangle構造体を保存するようになっています。
Rectangle(表示位置X座標,表示位置Y座標,横幅,縦幅)と指定します。

どちらのプロパティを利用しても最大化ボタンを押したときにのみ適用されます。
ただし、MaximumSizeプロパティはやはり一瞬だけ全画面表示になります。
ということから、フォームを固定してMaximizedBoundsプロパティで最大化させる方法がベターになりそうです。

0件のコメント

コメントの投稿

新規
投稿した内容は管理者にだけ閲覧出来ます

0件のトラックバック

トラックバックURL
http://hinagis.blog33.fc2.com/tb.php/17-3515602e
この記事に対してトラックバックを送信する(FC2ブログユーザー)

Appendix

最新記事

検索フォーム

月別アーカイブ

売れ筋ランキング

お楽しみ用

アニメグッズ

プロフィール

Author:ひなぎ
VB2005&2008でゲーム作成中

FC2カウンター

Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

FC2ブログ 一戸建て