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

フォームサイズについて

環境/言語:[OS : Windows 2000 Professional / 言語 : Visual Basic .NET / .NET Framework : 1.1]
分類:[.NET]

【解決したい問題】

いつもお世話になっております。

MSの以下のページを参考に共通デザインフォームを作成し、
各プログラムで継承して開発を行おうとしています。

継承を利用して画面デザインを作成する方法:
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/inheritance.aspx

ところが、共通デザインフォームのフォームサイズをデザイナ上で(1000,730)に設定したのですが、共通デザインフォームを継承した子フォームではデザイナ上のフォームサイズが(996,707)になってしまいます。

共通デザインフォームのClientSizeは
New System.Drawing.Size(994, 705)
となっています。

こちらの掲示板を検索したところ

中国語OSでのフォームサイズについて以下のような投稿がありました。
>Form.Sizeが800x600になるようにデザイナで設定していたとして、
>開発環境でのタイトルバーの高さが20だとしたら、
>Form.ClientSizeは800x580で保存されます。
>これをタイトルバーが30の環境で動かせば、
>Form.Sizeは800x610となります。
>画面のプロパティの「デザイン」タブの設定や
>「設定」タブで指定できるフォントのDPI指定などの影響で
>フォームやコントロールのサイズは影響受けると思います。
>使用環境が多岐に渡る場合は、この辺を考慮して
>ゆとりのあるデザインする必要があると思います。
>多言語を扱う場合は、ボタンの文言の長さが日本語の場合と
>その他の言語の場合とで同じような長さになるようにも考慮しておく必要も>あると思います。

継承の場合も同じでしょうか。
ちなみに日本語OSです。
また、同じである場合、
タイトルバーの高さは何処で設定するのでしょうか?

ご存知の方いらっしゃれば御教授願いたいです。
宜しくお願いします。

【解決するために何をしたか】

別の開発環境(Win2000 Pro 日本語)で試してみましたが同じ結果になっています。
こんばんは kiyoさん

継承したフォームでFormBorderStyleを変更していないですか?
■No13271に返信(らってさんの記事)
> こんばんは kiyoさん
>
> 継承したフォームでFormBorderStyleを変更していないですか?
>
>

返信ありがとうございます。

共通デザインフォームではFixedSingleになっています。
継承したフォームでも継承しているので
FixedSingleになっています。
こちらに投稿するときにサイト内を検索して以下のような情報を
得てFixedSingleに設定してみました。

>フォームのサイズを変更できないようにとのことなら
>FormBorderStyleをFixed???にしてみてはいかがでしょう

引き続き何か情報があれば宜しくお願いします。
2005/10/14(Fri) 23:20:39 編集(投稿者)

こんばんは kiyoさん

こちらで試した限りでは、そのまま継承されましたね。

一度、新しいプロジェクトを作成して、
Form_Load に以下の2行だけを記述して、継承元のフォームを作成してください。

Me.FormBorderStyle = FormBorderStyle.FixedSingle
Me.Size = New Size(1000, 730)

それで、このフォームを継承してどうでしょうか?
> ところが、共通デザインフォームのフォームサイズをデザイナ上で(1000,730)に設定したのですが、
> 共通デザインフォームを継承した子フォームではデザイナ上のフォームサイズが(996,707)になってしまいます。

共通デザインフォーム(以降、親フォームと呼びます)を作成した環境と
継承した子フォームをデザイナで開いている環境は同じですか?

また、子フォームをデザイナで開いた後、何らかの変更を加えて保存してしまっていませんか?
その時点で子フォームのデザイナ設定としてClientSizeの値がソースコードに
保存されますので、親フォームのサイズとの関連はなくなります。

> 継承の場合も同じでしょうか。

継承かどうかは関係ありません。フォームをデザイナで開くと
それによってSizeプロパティがClientSizeプロパティの設定値とOSのデザイン設定から
導出されるため値が変化します。

> また、同じである場合、
> タイトルバーの高さは何処で設定するのでしょうか?

タイトルバーの高さはOSのデザイン設定によるのでユーザの環境ごとに異なる値ですから、
一意に設定はできません。
らってさん
よねKENさん
返信ありがとうございます。

>Form_Load に以下の2行だけを記述して、継承元のフォームを作成してください。
>Me.FormBorderStyle = FormBorderStyle.FixedSingle
>Me.Size = New Size(1000, 730)

確かにこの2行を継承元に記述すると大丈夫になりました。

> 共通デザインフォーム(以降、親フォームと呼びます)を作成した環境と
> 継承した子フォームをデザイナで開いている環境は同じですか?

同じ環境になります。

> また、子フォームをデザイナで開いた後、何らかの変更を加えて保存してしまっていませんか?
> その時点で子フォームのデザイナ設定としてClientSizeの値がソースコードに
> 保存されますので、親フォームのサイズとの関連はなくなります。

継承フォームの追加で追加し、デザイナを開いた直後に
サイズが変わってしまっています。

継承元をシンプルにし、画面サイズを(1000,730)にし
FixedSingleで親フォームを作成した場合、
問題なく継承されました。
しかし、ボタン等のその他のコントロールを配置すると
小さくなってしまう現象が解消されません。

らってさんからのコメントの通り2行を親フォームに追加することで、
デザイナ上でもサイズは変わらないことが確認できましたし、
必ずフォームロード時にサイズを決定しているので、
実際コンパイルして実行する場合も
サイズは絶対(1000,730)になるというメリットもできましたので、
今回はこの方法でいこうと思います。

引き続き自分でも調査して原因が突き止められたら
また書き込みさせていただきます。

らってさん、よねKENさんご丁寧に返信ありがとうございました。(^_^)
解決済み!

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