読者です 読者をやめる 読者になる 読者になる

ハテナキハテナ --unics’s think/sync

福井のまんなかでぼんにょり呟く、ゆにくすの日々オボエガキなど。

VisualStudio2010で直ってた!SplitContainerバグ!

長年の因縁に決着(ってほどでもない)がついた模様です。長文注意。
VisualStudio2005にて、SplitContainerのバグ…。 - ハテナキハテナ --unics’s think/sync
SplitContainerバグについて、VS2008でもやってみた。 - ハテナキハテナ --unics’s think/sync
↑今までの因縁。

えーと、起こっていた現象としては、VisualStudioにてSplitContainerを使用した際、各パネルのMinSize値をデフォルトから変更すると、SplitterDistance*1の値がPanel1MinSize*2とPanel2MinSize*3の間の値であるにも関わらずデザイナでエラーが発生するというものです。
それというのも、SplitContainer自体の初期設定サイズは(150,150)となっているのが問題のようでして。
フォームデザイナで描いたコントロールのソースは自動生成されるので見かけ的にはわかりませんが、内部ソースではコントロールサイズを設定する前に各パネルのMinSizeを設定する形になってしまい、「オイ、親のパネルよりでかい値設定してんじゃねーよ」と怒られてしまうのです。
…正直、自動生成ソースでそんなこといわれても知らんがな(´・ω・`)てカンジだったので、生成されたソースを手動でいじくって現象を回避したわけなのです。
まぁそんなわけで、VisualStudio2005で確認したこの現象は2008でも直っておらず、Microsoftのフィードバックサイトに不具合として挙げられていても保留扱いにされて(https://connect.microsoft.com/VisualStudio/feedback/details/93991/splitcontainer)しょぼーんとなっていたわけですが、
なんと!
2010(.NET Framework4.0)では直ってました!
自動生成されたコードは以下のとおり。

// 
// splitContainer1
// 
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
//※この時点でthis.splitContainer1.Sizeを検証したところ、
//Width=150,Height=100だった
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Panel1MinSize = 300;
this.splitContainer1.Panel2MinSize = 500;
this.splitContainer1.Size = new System.Drawing.Size(808, 470);
this.splitContainer1.SplitterDistance = 300;

うーん…自動生成コードの記述順は変わってないし、SplitContainerのSize初期値は(150,100)になってるんですけどねぇ。とりあえずエラーは回避されてるのでいい…のか…???

*1:2つのパネルの分割位置。Panel1MinSizeとPanel2MinSizeの間の値である必要がある

*2:パネル1の最小幅(縦分割の場合は最低高)

*3:パネル2の最小幅(縦分割の場合は最低高)

qqq for your reading!!
(c)Electro-U-nics --since 2004.03.26