酔いどれ気分でGrapeCity謹製のWijmoを語る

0
たーせる @tercel_s

ボタンやラジオボタンなど、「押して操作する系コンポーネント」は外観重視でitemFormatterやformatItem()の使用はやむを得ない。 が、その場合も絶対に前面のコンポーネントがフォーカスを奪いっぱなしにならないよう徹底的に“処置”する。

2019-04-12 00:18:16
たーせる @tercel_s

たとえば、セル上に「Enterキーでイベントが発火するボタン」を配置したとする。 この時点で、ただちに「ボタン自体にフォーカスが当たっているのか、ボタンをホストしているセルにフォーカスが当たっているのか問題」が勃発する。 ボタン自体にフォーカスが当たると前述のとおり立ち往生するので、

2019-04-12 00:18:16
たーせる @tercel_s

論理的に考えて、ボタンがフォーカスされた瞬間に、その背後にあるセルへフォーカスを逃す処理を組み込む必要がある。 ところが、セルにフォーカスが当たっている状態でEnterを押すと、FlexGrid#keyActionEnterに従ってフォーカスが滑ってしまう。

2019-04-12 00:18:17
たーせる @tercel_s

ということはつまり、ボタンをホストしているセルに限って、keyActionEnterを無効化しなければならない。 これは、FlexGrid#selectionChangedイベントの中で行えばよいと素人は考えがちだが、話はそう簡単ではない。

2019-04-12 00:18:17

selectionプロパティについて、語る

悩ましい現象について

たーせる @tercel_s

これは​#FlexGrid​のサブクラスであり、GrapeCity様に年間12万のお布施をする者だけが使う事を許された​#MultiRow​で確認した自称なんだけど(←会社に買って貰った)、selectionChangedイベントの入り先が結合セルだった場合、時と場合によってイベントに引き渡されるCellRangeオブジェクトが変わるのだ

2019-04-12 00:18:18
たーせる @tercel_s

わかりやすいところで言うと、結合された単一セルを選択しているにも拘らず、CellRange#isSingleCellプロパティがtrueだったりfalseだったりする。 正直これは​#Wijmo​のバグではないかと思っている。 また同様に、row, row2, col, col2プロパティも安定しない。

2019-04-12 00:18:18
たーせる @tercel_s

そのため、FlexGrid#selectionで得られるCellRangeを基に、被フォーカスセルを厳密に特定することは不可能に近い。 ……長くなったので、一旦ここで切る。

2019-04-12 00:18:18
たーせる @tercel_s

#FlexGrid​は、カスタムエディタを使えばExcelとかから複数セルのドラッグ&ドロップにデフォルトで対応できる。 itemFormatterやCellTemplateでセルの上にテキストボックスを1個1個配置すると、もはや<table>タグと同じで単一セルにしかドロップできないし、なんならグリッドの複数セル選択も危うい。

2019-04-12 00:27:30

結論

それでもWijmoが大好きです。