(株)アイジュピタ情報ライブラリ

SplitContainerの自動生成コード不具合について

※この現象はVisualStudio2005(.NET Framework 2.0),2008(.NET Framework 3.5)で発生、2010(.NET Framework 4.0)で発生しないことを確認しました。
SplitContainer(パネルの中身を2分割して境界線を自由に移動できるやつです)でデザイナの不具合を発見したので、その回避方法を記述します。

SplitContainerには以下のプロパティが存在します。
「Panel1MinSize」――パネル1の最小幅(縦分割の場合は最低高)
「Panel2MinSize」
――パネル2の最小幅(縦分割の場合は最低高)
「SplitterDistance」
――2つのパネルの分割位置。Panel1MinSizeとPanel2MinSizeの間の値である必要がある。
しかし、各パネルのMinSize値をデフォルトから変更すると、SplitterDistanceの値がPanel1MinSizeとPanel2MinSizeの間の値であるにも関わらずデザイナでエラーが発生します。

この件についてネットで調べたところ、以下のURLに記述がありました。
http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-36298.htm

SplitContainer自体の初期設定サイズは(150,150)なのですが、デザイナが自動生成するソースにて、実際のコントロールサイズを設定する前に各パネルのMinSizeを設定してしまい、その値が初期設定サイズを超えてしまうことで発生するようです。

とりあえず手っ取り早くエラーを発生させなくする方法として以下の処置をとりましたので、SplitContainerをお使いになる際の参考になればと思います。 (ここからデザイナをいじって再ビルドするとまた発生するので、根本的な解決にはなってないのですが…)

該当するフォームのDesigner.csを見ると、以下のような記述になっています。

この、「Panel2の設定の後に親パネルのサイズ設定が行われている」というのが原因のようです。
ということで、上記ソースの下3行を移動しました。

これでとりあえずエラーは発生しなくなりました。

なお、この不具合はMicrosoftのフィードバックで挙げられていますが、解決策は延期としてクローズされています。
https://connect.microsoft.com/VisualStudio/feedback/details/93991/splitcontainer
VS2010(.NET4.0)では発生しないですが、旧バージョンを使用する際にはご注意ください。

0 コメント: