DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォームの内側のサイズを指定したい

環境/言語:[Windows7 C# .NET3.5]
分類:[.NET]

こんにちは。

検索してみたのですが、適当なキーワードが思い付かず見付けられませんでした。
以下の様な事は可能でしょうか?

FormBorderStyleがNoneの状態で1024x768にサイズ固定したフォームがあります。
この同じソースからSizableのフォームを作りたいと思っています。
(ソースを流用したいと思っています)
このSizableのフォームは、大きくなるぶんには構わないのですが、元の1024x768より小さくなってほしくありません。

この時、MinimumSizeを1024x768に指定してしまうと、タイトルバーがあるので、フォームを元のサイズより小さくできてしまいます。

MinimumSizeをBorderStyleに関係なく内側のサイズで指定することはできるでしょうか?

簡単そうに思えて、実は出来ないのでしょうか?

よろしくおねがいします。
■No32151に返信(sokafujiさんの記事)
> タイトルバーがあるので、フォームを元のサイズより小さくできてしまいます。

Me.Size ではなく、Me.ClientSize を基準にしたいのでしょうか。
だとすると、タイトルバーの高さを調べたうえで、
それを考慮したサイズをセットすることになるかと思います。

使うとすれば、
 SystemInformation.CaptionHeight
 SystemInformation.FrameBorderSize
あたりですね。


さらに言えば、実行時に OS の画面設定を変更された場合(枠線の太さや
タイトルバーの大きさの変更)への対応も必要になってくるかと思います。

これについては、Microsoft.Win32.SystemEvents の
UserPreferenceChanged イベントを拾うことで対処できるかと思います。
Load(およびSystemEvents::UserPreferenceChanged)イベントで、
Form::Size - Form::ClientSize + 必要な最小サイズ
をForm::MinimumSizeに設定すればいけるんじゃないですかね。
魔界の仮面弁士さん、Hongliangさん。

this.MinimumSize = this.Size - this.ClientSize + new Size(1024, 768);
とすることで、やりたいことができました。

UserPreferenceChangedイベントは、
http://dobon.net/vb/dotnet/system/userpreferencechanged.html
の通りにして引っ掛けました。

どうもありがとうございました。
解決済み!
補足します。

UserPreferenceChangedで拾うイベントカテゴリですが、UserPreferenceCategory.Windowで良いようです。
クラシック表示にしたりすると、このイベントが発生します。

UserPreferenceCategory.Colorも発生するのですが、これは副次的に発生しているだけだと思います。

しょっちゅう発生するイベントではありませんので、UserPreferenceChangedが発生すればとりあえずMinimumSizeを更新しても良いかも知れませんが、一応ちゃんと拾ってみました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板