【ご質問】
Record選択時にEnterキーを押下しても、Actionイベントが発生せず、
editable?=trueのカラム上が選択範囲のときのみKeyPressイベントが発生するようでした。
画面初期表示時に、RecordGridにKeyPressイベントが発生するように
フォーカスを当てたいのですが、どのようしたら実現できるでしょうか?
【回答】
RecordGridにイベントを追加するのではなく、
SkinnableRecordGridUIクラスにKeyPressイベントを追加することで、
RecordGridにKeyPressイベントが発生させることが可能です。
また、editable?=falseのセルでもイベントが発生するようにするためには
カスタムセルを作成し、セルが持つTextFieldにKeyPressイベントを追加します。
詳細はサンプルをご参照ください。
{curl 7.0,8.0 applet} {curl-file-attributes character-encoding = “shift-jis”} {applet {compiler-directives careful? = true} }
{define-class public EnterKeyCell {inherits StandardStringCell}
{constructor public {default} {construct-super} }
{method public {create-editor}:TextField
let editor:TextField = {super.create-editor}
||セル上で操作するテキストフィールドに対して、 ||Enterキーのイベントを追加する。 {editor.add-event-handler {on e:KeyPress do {if e.value == KeyPressValue.enter then {popup-message “EnterKey Press Event 拾いました。”} {e.consume} } } } {return editor} } }
{let rs-choice-grid:RecordSet = {RecordSet {RecordFields {RecordField “choice”, caption = “選択”, domain = bool }, {RecordField “service”, caption = “サービス”, domain = String } }, {RecordData choice = false, service = “良いサービス”}, {RecordData choice = false, service = “普通サービス”}, {RecordData choice = false, service = “悪いサービス”} } }
{let rg:RecordGrid = {RecordGrid width = 264pt, height = 192pt, name = “sample”, automatic-columns? = false, column-selection-enabled? = false, record-selection-enabled? = true, select-current-record? = true, record-source = rs-choice-grid, {RecordGridColumn width = 0.8cm, “choice”}, {RecordGridColumn width = 3.2cm, “service”, editable? = false, cell-spec = EnterKeyCell}, ui-object = {SkinnableRecordGridUI {on e:KeyPress do {if e.value == KeyPressValue.enter then {popup-message “EnterKey Press Event 拾いました。”} {e.consume} } } } } }
{Dialog rg}
{do {rg.request-key-focus} }
|