毎日プログラムしてるけど、ほぼ更新してない!
HSPもcocos-2dxも全く触れて無いわ!
つか、ほぼ毎日、終電だゴルア!
まあ、楽しいのでいいんですがね。
不具合修正のプログラムが楽しい人ってそうそういないか。
で、不具合について。
Windows.forms.System.SplitContainerを使ってフォームを作る。
これは、左右2つのパネルをSplitterで分割するフォームパーツだ。
このSplitterはアプリ使用者が自由に動かすことができるが、
アプリを再起動すると、デフォルト位置に戻ってしまうので、位置をキープして欲しい、というもの。
実は、保存する際に、値はちゃんとシリアライズされている。
ではなぜ、ずれてしまうのか?
それは、いわゆる仕様バグである。
まず、SplitContainerを、幅200で初期化・作成する。
Splitterの位置は、100(ちょうど中央)とする。
※ちなみにSplitter自体の幅は4
ここまではちゃんと、再起動時にデシリアライズされている。
問題は…。
作成したこのSplitContainerを、Dockに収めていることだ。
その際、300とか400とか大きめのDockにはめ込んでいるため、
幅200で作ったSplitContainerが、引き伸ばされる。
全体が均等に引き伸ばされるため、spliterの位置が、右にずれるのだ。
そしてこれが保存され、次回再度引き伸ばされ…。
デフォルトに戻るどころか、どんどん右にずれていく、というのが現状だったようだ。
解決するのは簡単で、Splitter自体は自由に動かせるが、ウインドウサイズを変えても、
パネルサイズを変更しない、fixedPanelプロパティで、Panel1(左側)を固定にするだけでいい。
…のだが!
実は罠があるらしい。
今開発しているツールは、各種機能が複数のタブによって仕分けされており、
この複数のタブそれぞれに、SplitContainerが使われている。
前半で述べた方法で、これらすべてのSplitterの位置は個別に保存されるようになったのだが、
どうやら、リセットするトリガーがあるらしい。
タブ3にある、Splitterの位置を動かしたら、なぜかタブ1とタブ2の位置がリセットされるのだ。
(現象はランダムで、変わらない場合もある)
現在、このリセットされるトリガーが何か?が調査対象である。