VLアプリケーションでの高度なEnterキー処理
多くの場合、Enterキーは、VLアプリケーションのいずれかの処理(検索の実行、更新の保存など)の開始を示すことに使用されます。
通常、「検索」や「保存」などのプッシュボタンでは、ButtonDefault()プロパティが使用されます。これにより、Enterキーが押されると、ボタンに対して仮想のクリック・イベントが発行されるようになります。
再利用可能パーツを多く含む複雑なVLフォームでは、ButtonDefault()プロパティを使用すると問題となる場合があります。その理由は次の2つです。
· Windowsフォームでデフォルトとできるボタンはどの時点でも1つのみです。
· プログラム・ロジックを使用して、Enterキーが実際に何を意味するのか、および異なるコンテキストでどのように処理されるべきかを決定することはできません。
複雑なフォームの異なる場所で異なるEnterキー処理を行うには、KeyPressイベントを使用することが最も強力な解決方法です。VLプログラムでこれを使用すると、Enterキーを具体的に捕捉できるため、さまざまな方法で応答することができます。
VLFに付属しているフィルター例DF_FILT1のロジックに次のような修正を加えることを検討します。
1. どのボタンにもButtonDefault()を指定しない
これにより、Enterキーの対象となるボタンを混同することがなくなります。
2. ユーザーは2種類の方法で従業員名の検索を開始できる
Evtroutine Handling(#Surname.KeyPress) Keycode(#KeyCode)
if ('#KeyCode.Value = Enter')
If *SEARCHOK
Execute Search
Else
Use Message_box_show (ok ok Error *Component 'Enter a search name')
Endif
Endif
Endroutine
*
* Search button pressed
*
Evtroutine Handling(#Search_phbn.Click)
Execute Search
Endroutine
1番目のイベント・ルーチンは、Surnameフィールド内でのEnterキーの使用を処理します。ユーザーがEnterを押すと、検索が実行されるか、またはエラー・メッセージが表示されます(フィールド#Surnameがブランク以外の場合、条件*SEARCHOKは真になります)。
2番目のルーチンは検索ボタンの特定のクリックを処理します。
この2つのルーチンは、検索ロジックを実行する共通のSEARCHサブルーチンを共有します。
複数のフィールド(または他のコントロール)が使用されている場合、それらすべてのフィールドを次のような1つのルーチンを使って処理できます。
Evtroutine Handling(#Surname.KeyPress #GiveName.KeyPress #ComboBox1.KeyPress etc etc)
Keycode(#KeyCode)