#646 | Enterキーでの次のタブ移動順を動的に変えるには? | フォーム、VBA | |
Accessのフォームでは、コントロールの『タブストップ』プロパティを”いいえ”に設定することで、EnterキーやTabキーを押していったときにそのコントロールにフォーカス移動しないようにする(=スキップさせる)ことができます。 画面例: このフォームでは、左半分にある4つのテキストボックスにはタブストップ”はい”、右半分の4つにはタブストップ”いいえ”を設定してあります。 もしすべてのコントロールがタブストップ”はい”であれば、EnterキーやTabキーを押したとき上図の@ → Gの順番でフォーカスが移動します。 しかし右半分のコントロールがタブストップ”いいえ”となっていますので、@ → Cを移動したあと、次は@に移動します。 ■「表示価格」でEnterキーを押したとき(C → @の順でフォーカスが移動します) 一方、そのような設定をしても、それぞれのコントロールの「タブ移動順」プロパティの大小である「タブオーダー」は活きています。 そのため、マウスを使ってそこにフォーカス移動したあとにEnterキーやTabキーを押すと、必ず次のタブストップ”はい”のコントロールに移動します。 ■「目標点」でEnterキーを押したとき(E → @の順でフォーカスが移動します) このようなインタフェースにおいて、もし『タブストップ”いいえ”のコントロールからタブストップ”いいえ”のコントロールへ』移動させたいようなとき、たとえば上図で「発注点」にマウスでフォーカスを置いたあと、EnterキーやTabキーでD → E → F → Gのように移動させたいとき、それらのコントロールのイベントプロシージャで対応させることができます。 プログラムを使うため、タブオーダーを設定するダイアログのように簡単な操作では移動順を指定できませんが、タブストップが”いいえ”のコントロールも含めてタブ移動順を制御することができます。 それには、タブストップ”いいえ”のコントロールごとに次のようなイベントプロシージャを追加します。 Private Sub 発注点_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then Me!目標点.SetFocus End If End Sub Private Sub 目標点_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then Me!梱包単位.SetFocus End If End Sub Private Sub 梱包単位_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then Me!生産中止.SetFocus End If End Sub Private Sub 生産中止_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then Me!発注点.SetFocus End If End Sub ここでは「引数 KeyCode が vbKeyReturn または vbKeyTab であるとき」、すなわちそのコントロール上でEnterもしくはTabキーが押されたとき、それぞれの指定のコントロールにフォーカス移動します。 実行例: 「生産中止」では「商品コード」にフォーカスを戻すこともできますが、ここでは「発注点」に移動させています。それによって「タブ移動するグループ」と「タブ移動しないグループ」の2つのグループ内それぞれでサイクリックにフォーカス移動することになります。 ※なお、より厳密な動作を考慮すると、CtrlやShiftなどの特殊キーが同時に押されていた場合、入力規則違反などでそこからフォーカスを他に移動できないなどのケースも考慮する必要があります。上記のIf文で書かれた部分はもっと複雑な条件分岐が必要となります。 |
|||
|
Copyright © T'sWare All rights reserved |