web-dev-qa-db-ja.com

テキストボックスでEnterキーを押し、VBAでボタン機能を実行します

Access 2010で作成され、VBAコードを使用してデータベースへのログインフォームがあります。押せるようになりたい EntertxtboxPasswordで、btnLogin_Clickイベントを自動的に実行します。私はこれを試しました:

Private Sub txtboxPassword_KeyDown(KeyCode As Integer, Shift As Integer)
 If KeyCode = 13 Then
    btnLogin_Click
 End If
End Sub

パスワードが正しくないという自作のエラーが表示されます。デバッグすると、実際にはtxtPasswordnullであることがわかりますが、テキストを入力しただけです。

ただし、マウスでログインボタンをクリックすると、完全に機能します。なぜvbaはそのように動作するのですか?どうすればそれを機能させることができますか?

[〜#〜] note [〜#〜]私も試しました:

  • KeyPress:押した後 Enter フォーカスはbtnLoginに移動しますが(タブの順序がそのようなためかもしれません)、btnLogin_Clickイベントは実行されません。
  • KeyUp:KeyPressと同じです。
5
EricPb

Accessのボタンには、Defaultというプロパティがあります(その他プロパティページ)。 Yesに設定すると、を押すと、フォームはボタンクリックイベントハンドラーを自動的に呼び出します。 Enter。追加のキーイベント処理は必要ありません。

Cancelプロパティもあります。ボタンのボタンをYesに設定すると、ユーザーが入力したときにフォームが自動的にアクティブにします。 Esc-キー。 キャンセルボタンには非常に実用的です。

keyCodeをアクティブにするには、Key Previewフォームのプロパティを[〜#〜] yes [〜#〜](下部にあります)に設定する必要があります。

If KeyCode = vbKeyReturn Then
    Your_fuction_here
End If
2
Dil Dilshan

カントはあなたの問題を正確に再現しますが、しばらく前に私は幾分似たような問題を抱えていて、以下を追加することでそれを解決しました:

Private Sub txtboxPassword_KeyDown(KeyCode As Integer, Shift As Integer)
  If KeyCode = 13 Then
     btnLogin_Click
     KeyCode.Value = 0
  End If
End Sub
0
Lukas2

アクションを実行するボタンで、プロパティ「その他」に移動し、「デフォルト」を「はい」に設定します。次に、テキストボックスでEnterをクリックすると、ボタンが機能します。

0
Snowflake68

KeyPress KeyDownではなく機能し、_Click subを呼び出すと、他のイベントを発生させる可能性のあるトリガーの送信を回避できます。

Private Sub txtboxPassword_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
         Call btnLogin_Click
    End If
End Sub
0