Q29:表示させたテーブルデータ内のセルを選択した時にマスクをかけたい。
Q29-1:
表示させたテーブルデータ内のセルを選択した時にマスクをかけたいのですけど、その方法がよくわかりません。
現状としましては、数行のデータをテーブルに表示、*行目のセルを選択、データを選択したタイミングで全セルを灰色に設定しています。
コンポーネントリファレンスで調べたのですが、1行選択したら即座に全セルを選択不可能(フォーカス不可、選択不可)にするやりかたがわからずに、初期表示の色(白)、選択後の色(灰色)というように、現在色で判断してセルを選択できないようにしているのですが、ロジックが間違えているようで、グリッドの色を灰色にしている為なのか目で見る限りではセルの選択はされていないのですが、フォーカスがあたり、その時に現在行を取得するというメソッドの処理の中にそのフォーカスの位置の行が入ってしまいます。
こういう処理を防ぐ為に テーブルデータを選択、全セルを選択不可(フォーカスもあてれない)というやりかたがあれば教えてください。無い場合は上記に近い処理を教えていただきたいです。
関連ファイル:セル制御参考画面.xls
A29-1:
お送りいただいたエクセルファイルを確認し、作成されようとしているアプリケーションの仕様ならびに現在抱えておいでの問題点を以下のように理解いたしました。
仕様
(1) テーブルのセル上でマウスボタン押下を行うと、そのセルを含む行のデータがそれぞれ対応するフィールドに表示される。
(2) その後は、テーブルのどこでマウスボタン押下を行っても、フィールドに表示されている値が変更されることはない。
(3) [取消]ボタンをクリックすると(2)の状態が解除され、(1)の状態に戻る。
現在抱えている問題点
(1)の処理は、テーブルでのセル選択をトリガーとし、発生するデータ選択イベントの接続先に記述されている。テーブルを編集不可としてもデータ選択イベントが発生してしまうため、(2)の状態を実現することができない。
以上の理解でよろしいでしょうか?以下、この理解に基づいてご回答差し上げます。
上述の(2)の状態を実現するには、イベント伝播制御コンポーネントをお使いになるのがよろしいかと存じます。これは、イベントを受け取ったときに、その先の処理の実行可否を属性で指定するコンポーネントです。
お送りいただいたエクセルファイルの記述をもとにサンプルをご用意しましたので、どうぞご覧下さい。
蛇足ですが、サンプルでは、テーブルのセル選択もフォーカス設定もされています。ただ、イベント伝播制御を利用することでセル選択後の処理を実行しないようにし、テーブルのclearSelection()メソッドを実行することで、即座にセル選択を解除しています。上述の仕様の実現のみを考えた場合、clearSelection()の実行および背景色の設定は不要です。
関連ファイル:テーブル選択制御.mzax (※このファイルは、ZIP形式に圧縮してあります。)