今度はイベントでハマッタ

さてさて、今日で第2回となる・・・*1
昨日はSQLではまりましたが、今日はVB側ではまっちゃいました(笑)
顧客要望*2で、
ある管理画面のリファクタリングを行っていたところ、
奇妙な*3現象に悩まされた。


セルをクリックしたら
名称を持ってくるイベント*4を持つFlexGridが
データ移動で画面を遷移時の初期化でNothingになりEXEが堕ちてしまうのだ。


まあ、これだけなら私でも分かる。
画面に付随するコントロールにTextChangeなんかをつけておくと、
画面が出来たときに呼ばれちゃうパターンなんだろうけど、
今回はちょっと違ってて、
データを表示するグリッドが1行の時は発生しなくて、
2行以上になると発生するというもの。・・?


デバッグで追うと、

  1. 初期化するときにDataSourceの持つDataTableを空にする
  2. このタイミングでセルをクリックする前のイベントが走る
  3. FlexGrid上のRowなどのプロパティは初期化前と変わらないが、DataSourceの中身を見ると空になってる。
  4. 堕ちる(ときがある)

ヘルプ見ると、RowやColプロパティが手動、コード問わず変化すると発生とあるが、
中身が空になって見かけ上のプロパティが変わる前に
このイベントが呼ばれているという事なのだろうか?


こいつはうんうん悩んだけど説明できるような解決までは至らず、
回避用の条件(DataSorceが空なら無視)を追加しておいた。
何でなんだろうな〜。気持ち悪いな〜。


気持ち悪いでいえば、
このクラス関連のインデックス基点が統一されてないのも嫌だね。
セル指定の時は0からだったり、行指定の時は1からだったりと。
DataTableはカウントにカラムはいらないけど、グリッドは入るみたいな・・。

デバッグ必須ですよ。当たり前だけど。
明日も別画面と同じような修正が待っている・・。
無事に帰ってきたいなあ(早く帰りたいな〜)

*1:なんだこの始まりは。

*2:単なる仕様追加による改良だが・・

*3:私的にはね

*4:Afterなんとか忘れた