Thread Rating:
  • 305 Vote(s) - 2.8 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Enterキーでのフォーカス遷移
07-28-2011, 05:08 PM,
#1
Enterキーでのフォーカス遷移
テキストフィールドなどのコントロールは通常タブキーでフォーカス遷移しますが、

このフォーカス遷移をEnterキーで行うことはできないでしょうか。
Reply
07-28-2011, 05:13 PM,
#2
RE: Enterキーでのフォーカス遷移
Enterキーが押されたイベントは、UIオブジェクトのKeyPressイベントで取得できるので、

この中でTabキーのイベントに変換して流してやればいけそうです。

下記のコードはレコードグリッドのカスタムセルのサンプルです。
cell-spec に設定すると、グリッド内のセルがエンターキーで遷移します。

Code:
{define-class public EnterMoveCell {inherits StandardStringCell}
  
  {constructor public {default}
    {construct-super}
  }
  
  {method public {create-editor}:TextField
    let editor:TextField = {super.create-editor}
    {editor.ui-object.add-event-handler
        {on e:KeyPress do
            
            {if e.value == KeyPressValue.enter
             then
                
                let kp:KeyPress = {KeyPress}
                
                set kp.value = KeyPressValue.tab
                
                set kp.shifty? = e.shift?
                
                {editor.ui-object.enqueue-event
                    kp
                }
                
                {e.consume}
            }
        }
    }
    {return editor}
  }
}

ちなみに、キープレスのイベントをenuqueue-event で発生させていますが、
handle-event だと、NullDereferenceExceptionが出てしまいます。
理由は分かりません。
Reply
07-29-2011, 01:53 PM,
#3
RE: Enterキーでのフォーカス遷移
(07-28-2011, 05:13 PM)umemura Wrote: ちなみに、キープレスのイベントをenuqueue-event で発生させていますが、
handle-event だと、NullDereferenceExceptionが出てしまいます。
理由は分かりません。

handle-eventを使えば、直接フォーカスが変わって、
Enterの残っているハンドリングがおかしくなります。

上の書いている方法は少し危険です、下の様に、イベントの流れがあれば。

[queue] enter -> 'a'

ユーザーは(移動)、('a'の入力)を期待しているでしょう。
ですが、enqueueすれば、こうなります。

[queue] enter -> 'a' -> tab

'a'が最初セルに入ってしまいます。

安全方法には、OpenControlsを使って、
SkinnableRecordGridUI.on-key-press-aux

SkinnedSRGTextFieldFeel.on-key-press
を書き換えるしかないかもしれません。

そこまでしなくてもいい可能性があるけど、他の設定によるんでしょう。
残念ですが今の時点ではちょっと困難なところです。
Reply

Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('168')