今度はイベントでハマッタ
さてさて、今日で第2回となる・・・*1
昨日はSQLではまりましたが、今日はVB側ではまっちゃいました(笑)
顧客要望*2で、
ある管理画面のリファクタリングを行っていたところ、
奇妙な*3現象に悩まされた。
セルをクリックしたら
名称を持ってくるイベント*4を持つFlexGridが
データ移動で画面を遷移時の初期化でNothingになりEXEが堕ちてしまうのだ。
まあ、これだけなら私でも分かる。
画面に付随するコントロールにTextChangeなんかをつけておくと、
画面が出来たときに呼ばれちゃうパターンなんだろうけど、
今回はちょっと違ってて、
データを表示するグリッドが1行の時は発生しなくて、
2行以上になると発生するというもの。・・?
デバッグで追うと、
- 初期化するときにDataSourceの持つDataTableを空にする
- このタイミングでセルをクリックする前のイベントが走る
- FlexGrid上のRowなどのプロパティは初期化前と変わらないが、DataSourceの中身を見ると空になってる。
- 堕ちる(ときがある)
ヘルプ見ると、RowやColプロパティが手動、コード問わず変化すると発生とあるが、
中身が空になって見かけ上のプロパティが変わる前に
このイベントが呼ばれているという事なのだろうか?
こいつはうんうん悩んだけど説明できるような解決までは至らず、
回避用の条件(DataSorceが空なら無視)を追加しておいた。
何でなんだろうな〜。気持ち悪いな〜。
気持ち悪いでいえば、
このクラス関連のインデックス基点が統一されてないのも嫌だね。
セル指定の時は0からだったり、行指定の時は1からだったりと。
DataTableはカウントにカラムはいらないけど、グリッドは入るみたいな・・。
デバッグ必須ですよ。当たり前だけど。
明日も別画面と同じような修正が待っている・・。
無事に帰ってきたいなあ(早く帰りたいな〜)