C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: フォームのサイズの情報が取得するたびに大きくなる


(過去ログ 123 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■73443 / inTopicNo.1)  フォームのサイズの情報が取得するたびに大きくなる
  
□投稿者/ 松岡 (3回)-(2014/09/26(Fri) 06:06:36)

分類:[C#] 

2014/09/26(Fri) 06:12:33 編集(投稿者)

ソフトを閉じるたびにフォームの大きさを保存して次回読み込んで大きさを整える仕様にしているのですが、フォームの大きさを取得する度に、なぜかサイズが大きくなっていきます。

Size.Width と Size.Height で取得しております。

AutoScaleModeはNoneにしてますが、他に何か事前の設定などが必要なのでしょうか?


引用返信 編集キー/
■73446 / inTopicNo.2)  Re[1]: フォームのサイズの情報が取得するたびに大きくなる
□投稿者/ 魔界の仮面弁士 (128回)-(2014/09/26(Fri) 10:28:30)
No73443 (松岡 さん) に返信
> フォームの大きさを取得する度に、なぜかサイズが大きくなっていきます。

幾つか確認。

・値の取得/保存は、どの時点でおこなっていますか? (FormClosing イベント? ResizeEnd イベント?)
・サイズの設定は、どの時点で行っていますか? (コンストラクタ? Load イベント?)
・Shown イベントでサイズを確認した場合、指定した前回サイズと同じ値になっていますか? 違うなら何ピクセルずれていますか?
・FormBorderStyle プロパティは何に設定されていますか?
引用返信 編集キー/
■73452 / inTopicNo.3)  Re[2]: フォームのサイズの情報が取得するたびに大きくなる
□投稿者/ 松岡 (4回)-(2014/09/27(Sat) 05:57:48)
2014/09/27(Sat) 05:59:54 編集(投稿者)

No73446 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士 さん

> ・値の取得/保存は、どの時点でおこなっていますか? (FormClosing イベント? ResizeEnd イベント?)
FormClosing イベントです。

> ・サイズの設定は、どの時点で行っていますか? (コンストラクタ? Load イベント?)
Load イベントです。

> ・Shown イベントでサイズを確認した場合、指定した前回サイズと同じ値になっていますか? 違うなら何ピクセルずれていますか?
Shown イベントは使っていないようです。
保存時に取得した数値を表示したところ、実行する度に横幅が+8,高さが+27追加されていきます。

> ・FormBorderStyle プロパティは何に設定されていますか?
Sizable となっていました。

よろしくお願いします。

m(__)m



引用返信 編集キー/
■73453 / inTopicNo.4)  Re[2]: フォームのサイズの情報が取得するたびに大きくなる
□投稿者/ 松岡 (5回)-(2014/09/27(Sat) 06:00:16)
2014/09/27(Sat) 06:09:43 編集(投稿者)

書込みミス
引用返信 編集キー/
■73454 / inTopicNo.5)  Re[2]: フォームのサイズの情報が取得するたびに大きくなる
□投稿者/ 松岡 (6回)-(2014/09/27(Sat) 06:01:52)
2014/09/27(Sat) 06:10:12 編集(投稿者)

書込みミス
引用返信 編集キー/
■73455 / inTopicNo.6)  Re[2]: フォームのサイズの情報が取得するたびに大きくなる
□投稿者/ 松岡 (7回)-(2014/09/27(Sat) 06:04:40)
2014/09/27(Sat) 06:05:12 編集(投稿者)

書込みミス
引用返信 編集キー/
■73456 / inTopicNo.7)  Re[2]: フォームのサイズの情報が取得するたびに大きくなる
□投稿者/ 松岡 (8回)-(2014/09/27(Sat) 06:05:21)
2014/09/27(Sat) 06:10:41 編集(投稿者)

書込みミス
引用返信 編集キー/
■73459 / inTopicNo.8)  Re[3]: フォームのサイズの情報が取得するたびに大きくなる
□投稿者/ 魔界の仮面弁士 (129回)-(2014/09/27(Sat) 16:45:43)
No73452 (松岡 さん) に返信
> 保存時に取得した数値を表示したところ、実行する度に横幅が+8,高さが+27追加されていきます。

法則性が見えてきましたね。

手元の環境では現象を再現できなかったため、確証は無いのですが、
下記の内容に、「横幅が+8,高さが+27」に関連する数値が含まれていたりはしないでしょうか。

string s = " Size = "                 + this.Size.ToString();
  s += "\r\n Bounds.Size = "          + this.Bounds.Size.ToString();
  s += "\r\n DesktopBounds.Size = "   + this.DesktopBounds.Size.ToString();
  s += "\r\n ClientSize = "           + this.ClientSize.ToString();
  s += "\r\n ClientRectangle.Size = " + this.ClientRectangle.Size.ToString();
  s += "\r\n---------------------------";
  s += "\r\n CaptionHeight = "        + SystemInformation.CaptionHeight.ToString();
  s += "\r\n BorderSize = "           + SystemInformation.BorderSize.ToString();
  s += "\r\n Border3DSize = "         + SystemInformation.Border3DSize.ToString();
  s += "\r\n FixedFrameBorderSize = " + SystemInformation.FixedFrameBorderSize.ToString();
  s += "\r\n FrameBorderSize = "      + SystemInformation.FrameBorderSize.ToString();

MessageBox.Show(s);


--- 以下、サイズに関するよもやま話。今回の件に関係あるかどうかは分かりません。---

AutoScaleMode = None で固定されるのは、クライアント領域のサイズです。
dpi 設定が 96 や 120 などに変化したとしても、ClientSize は変化せず、
周辺の Size のみが調整されるようになっています。


また、Size には上下左右の枠線幅とタイトルバーの高さ分が加わるため、
FormBorderStyle も影響を与えます。FormBorderStyle の設定に応じて
【None】
 Size.Width  = ClientSize.Width
 Size.Height = ClientSize.Height

【Sizable】
 Size.Width  = ClientSize.Width  + (2 * FrameBorderSize.Width)
 Size.Height = ClientSize.Height + (2 * FrameBorderSize.Height) + CaptionHeight

【FixedSingle】
 Size.Width  = ClientSize.Width  + (2 * FixedFrameBorderSize.Width)
 Size.Height = ClientSize.Height + (2 * FixedFrameBorderSize.Height) + CaptionHeight
の関係が成り立つはずです。

引用返信 編集キー/
■73464 / inTopicNo.9)  Re[4]: フォームのサイズの情報が取得するたびに大きくなる
□投稿者/ 松岡 (9回)-(2014/09/28(Sun) 20:04:53)
魔界の仮面弁士さん

> 手元の環境では現象を再現できなかったため、確証は無いのですが、
> 下記の内容に、「横幅が+8,高さが+27」に関連する数値が含まれていたりはしないでしょうか。

上記数値はあらためて調べて観ましたが、それらしきものは見つかりませんでした。

魔界の仮面弁士さんのサンプルコードを参照にしていろいろと調べ、試してみたのですが、私のレベルがまだまだ低い為そのまま反映させることはできなかったのですが、魔界の仮面弁士さんの指摘のおかげで常時ズレる数字が一定であることがわかったので、保存のたびにその数値分を調整することで、とりあえず問題は解決する事ができました。

こちらの情報不足で現象を再現できない中で、大変細かな検証、及びサンプルコード本当に有難うございました。

今後もまたお世話になる事があると思いますので、その時はどうぞよろしくお願い致します。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -