トップ回答者
System.Windows.Forms.Panel を極端なサイズにすると配置がおかしくなる

質問
-
はじめまして。
public partial class Form1 : Form{public Form1(){InitializeComponent(); //
int height = 33000;
Panel p = new Panel();p.Location = new Point(0, 0);p.Size = new Size(300, height);p.Dock = DockStyle.Fill;p.AutoScroll = true;this.Controls.Add(p);
Button but1 = new Button();but1.Location = new Point(0, height);but1.Size = new Size(100,100);
Button but2 = new Button();but2.Location = new Point(100, height - 300);but2.Size = new Size(100, 100);
p.Controls.AddRange(new Control[]{but1,but2});but1.Text = "Y=" + but1.Location.Y.ToString();but2.Text = "Y=" + but2.Location.Y.ToString();}}
上記のコードを実行させた場合にbut1とbut2のLocation.Yが違うのにもかかわらず、同じ座標に配置されてしまいます。Location.Yの値そのものは変更されていないようです。
バグなのか仕様なのか分からないのですがなにかご存知の方いらっしゃらないでしょうか?環境はVisual C# 2010 express です
回答
-
詳細は不明ですが、but2 の位置に置くと、ボタンの下辺は 32767 を超えています。
but1 の下辺:33000 + 100 = 33100 > 32767
but2 の下辺:(33000 - 300) + 100 = 32800 > 3276732767 は short 型の上限値です。
Windows Forms では古くの制限値を引きずっているところがあるようなので、この数値を超えられないのかもしれません。参考 Connect
https://connect.microsoft.com/VisualStudio/feedback/details/95516/size-and-location-of-controls-located-inside-panels-are-truncated-to-32767-without-error-or-warning
https://connect.microsoft.com/VisualStudio/feedback/details/117114/picturebox-property-height-is-not-an-integer
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク 山本春海 2010年11月22日 8:28
すべての返信
-
詳細は不明ですが、but2 の位置に置くと、ボタンの下辺は 32767 を超えています。
but1 の下辺:33000 + 100 = 33100 > 32767
but2 の下辺:(33000 - 300) + 100 = 32800 > 3276732767 は short 型の上限値です。
Windows Forms では古くの制限値を引きずっているところがあるようなので、この数値を超えられないのかもしれません。参考 Connect
https://connect.microsoft.com/VisualStudio/feedback/details/95516/size-and-location-of-controls-located-inside-panels-are-truncated-to-32767-without-error-or-warning
https://connect.microsoft.com/VisualStudio/feedback/details/117114/picturebox-property-height-is-not-an-integer
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク 山本春海 2010年11月22日 8:28