KeyPress イベント

Microsoft Access Visual Basic のリファレンス

KeyPress イベント

フォームやコントロールにフォーカスがある状態で、ANSI 文字コードに対応するキーまたはキーの組み合わせを押して離したときに発生します。このイベントは、マクロで "SendKeys/キー送信" アクションを使うか、Visual Basic で SendKeys ステートメントを使って、フォームやコントロールにキーストロークを送信した場合にも発生します。

Private Sub object_KeyPress(KeyAscii As Integer)

Object フォームまたはフォーム上のコントロールの名前。

KeyAscii ANSI キー コードを返します。引数 KeyAscii は参照によって渡されます。この引数の値を変更すると、異なった文字がオブジェクトに送られます。引数 KeyAscii に 0 を設定すると、キーストロークがキャンセルされ、オブジェクトはキーが押されたことを認識しません。

解説

メモ KeyPress イベントは、フォームおよびフォームのコントロールにのみ適用され、レポートのコントロールには適用されません。

KeyPress イベントが発生したときに、マクロまたはイベント プロシージャを実行するには、"OnKeyPress/キー入力時" プロパティにマクロ名または [Event Procedure/イベント プロシージャ] を設定します。

フォーカスのあるオブジェクトが、すべてのキーストロークを受け取ります。フォームがフォーカスを受け取ることができるのは、そのフォームにコントロールが配置されていないか、または、すべての可視コントロールが使用不可に設定されている場合だけです。

フォームの "KeyPreview/キーボードイベント取得" プロパティに [Yes/はい] を設定しておくと、コントロールに発生するイベントも含めて、フォームはすべてのキーストロークを受け取ります。この設定では、すべてのキーボード イベントはまずフォームに対して発生し、次にフォーカスのあるコントロールに対して発生します。どのコントロールにフォーカスがあっても、フォームで押された特定のキーに応答することができます。たとえば、Ctrl キーを押しながら X キーを押した場合に、フォームで常に同じアクションを実行することができます。

ANSI キーを押したままにすると、KeyDown イベントと KeyPress イベントが交互に発生します (KeyDown、KeyPress、KeyDown、KeyPress ...)。キーを離すと、KeyUp イベントが発生します。

KeyPress イベントは、表示可能なキーボードの文字、Ctrl キーとアルファベット文字または特殊文字との組み合わせ、Enter キー、および BackSpace キーに関して発生します。KeyPress イベントでは、ファンクション キー、移動キー (HomeEndPageUpPageDownTab など)、またはファンクション キーと補助キー (Shift キー、Ctrl キー、および Alt キー) の組み合わせを検出することはできません。これらを検出する場合は、KeyPress イベント プロシージャではなく、KeyDown イベント プロシージャおよび KeyUp イベント プロシージャを使います。KeyPress イベントでは、KeyDown イベントや KeyUp イベントとは異なり、キーストロークの状態は示されず、ユーザーが押したキーやキーの組み合わせに対応する ANSI 文字が示されます。

KeyPress イベントでは、各アルファベット文字の大文字と小文字は、別のキーコード、つまり、2 つの別の文字として扱われます。

メモ BackSpace キーは ANSI 文字セットに含まれますが、Del キーは含まれません。BackSpace キーを使ってコントロールの文字を削除した場合は KeyPress イベントが発生しますが、Del キーを使った場合には発生しません。

ANSI キーを押したり送信したりすると、KeyDown イベントと KeyPress イベントが発生します。キーを押したり送信したことによってコントロールに対するイベントが発生した後で、KeyUp イベントが発生します。キーストロークによってフォーカスが移動した場合は、移動前のコントロールに対して KeyDown イベントが発生し、移動後のコントロールに対して KeyPress イベントと KeyUp イベントが発生します。

たとえば、新しいレコードに移動してそのレコードの最初のコントロールに文字を入力すると、次のイベントが発生します。

Current (新しいレコードに対して)

s

Enter (新しいレコードの最初のコントロールに対して)

s

GotFocus (コントロールに対して)

s

KeyDown (コントロールに対して)

s

KeyPress (コントロールに対して)

s

BeforeInsert (フォームの新しいレコードに対して)

s

Change (テキスト ボックスまたはコンボ ボックスの場合、コントロールに対して)

s

KeyUp (コントロールに対して)

詳細については、ここをクリックしてください。

マクロ

KeyPress マクロを使用すると、フォーカスがフォームまたはコントロール上にある状態でユーザーが ANSI キーを押したときに常に応答できます。ただし、マクロでは ANSI キー コードを返して、押されたキーを判断できないため、通常、このイベントにはイベント プロシージャを使用します。

KeyPress イベント マクロで "CancelEvent/イベントのキャンセル" アクションを使用して、キーやキーの組み合わせをキャンセルできます。たとえば、ある条件に従ってコントロールへの ANSI キーストロークの入力を認めないようにすることができます。

使用例

次の使用例では、テキスト ボックスに文字が入力されるときに、それらの文字を 1 つずつ大文字に変換します。

次の使用例の実行結果を確認するには、[出荷先名] という名前のテキスト ボックスが配置されたフォームに対し、次のイベント プロシージャを追加します。

Private Sub 出荷先名_KeyPress(KeyAscii As Integer)

    Dim strCharacter As String

    ' ANSI 値を文字列に変換します。
    strCharacter = Chr(KeyAscii)
    ' 大文字に変換した文字を ANSI 値に変換します。
    KeyAscii = Asc(UCase(strCharacter))

End Sub