フォームやレポートと同様、個々のコントロールもまた、さまざまなイベントを持っています。コントロールの種類や特性によってイベントの種類も異なりますが、その扱い方はフォームなどと同じです。
コントロールが持つ、比較的よく使われるイベントには次のようなものがあります。他にもいくつかありますが、詳細はプロパティシートやオンラインヘルプで確認してみてください。
イベント名 |
発生タイミング |
更新前処理 |
データ内容が更新される直前(更新をキャンセルできます)
※”更新”とは内容が変更されてEnterキーを押したときなど |
更新後処理 |
データ内容が更新された直後 |
ダーティー時 |
データ内容が変更されたとき(変更をキャンセルできます) |
取り消し時 |
データの変更をキャンセルして元に戻そうとしたとき(キャンセルすることをキャンセルできます) |
変更時 |
テキストボックスやコンボボックスにおいて、入力内容が1文字でも変更されたとき |
リスト外入力時 |
コンボボックスにおいて、値集合ソースの項目にないデータが入力されたとき(そのデータ内容を取得して、リストに追加するなどの後処理を行なうことができます) |
フォーカス取得時 |
そのコントロールがフォーカスを受け取る直前 |
フォーカス喪失時 |
そのコントロールがフォーカスを失おうとしているとき(フォーカス移動をキャンセルして、そのコントロールにフォーカスを留めることができます) |
フォーカス取得後 |
そのコントロールがフォーカスを受け取ったとき |
フォーカス喪失後 |
そのコントロールがフォーカスを失ったとき(フォーカス移動をキャンセルすることはできません) |
クリック時 |
クリック(マウスを押し上げて離す操作)されたとき |
ダブルクリック時 |
ダブルクリックされたとき |
マウスボタンクリック時 |
マウスのボタンを押し下げたとき(押されたマウスのボタンや、Shift・Ctrl・Altキーの併用、およびクリックされた座標値を取得することができます) |
マウスボタン移動時 |
そのコントロール上にマウスのポインタが移動したとき(押し下げられているマウスのボタンや、Shift・Ctrl・Altキーの併用、およびポインタの座標値を取得することができます)) |
キークリック時 |
キーを押したとき(ファンクションキーやテンキー・矢印キーなども含めてどんなキーが押されたか、またShiftキーやCtrlキーとの併用も検出できます) |
キー入力時 |
キーが押されたとき(特殊キーは検出できませんが、通常文字の内容は取得できます) |
コントロールのイベント利用例です。後述するコントロールのプロパティ操作も含まれています。
テキストボックスの入力値をチェックする |
Private Sub データ1_BeforeUpdate(Cancel As Integer)
'テキストボックスの更新前処理
If Not IsNumeric(Me!データ1) Then
Beep
MsgBox "数値を入力してください!", vbOKOnly + vbExclamation
Cancel = True
End If
End Sub
|
テキストボックスの入力種文字を限定する |
Private Sub データ2_KeyPress(KeyAscii As Integer)
'テキストボックスのキー入力時
If KeyAscii < 65 Or KeyAscii > 67 Then
Beep
MsgBox "A〜C以外の文字が入力されました!", vbOKOnly + vbExclamation
End If
End Sub
|
テキストボックスからズームボックスを表示する |
Private Sub データ3_DblClick(Cancel As Integer)
'テキストボックスのダブルクリック時
DoCmd.RunCommand acCmdZoomBox
End Sub
|
テキストボックスの内容によってコマンドボタンの使用可否を切り替える |
Private Sub データ3_Change()
'テキストボックスの変更時
Me!cmdOK.Enabled = (Len(Me!データ3.Text) > 0)
End Sub
|
テキストボックスの可視を切り替える |
Private Sub chkデータ4_AfterUpdate()
'チェックボックスの更新後処理
Me!データ4.Visible = Not (Me!chkデータ4)
End Sub
|
テキストボックスの内容をトグルボタンで切り替える |
Private Sub fraMonth_AfterUpdate()
'オプショングループの更新後処理
Me!txtStart = DateSerial(Year(Date), Me!fraMonth, 1)
Me!txtEnd = DateAdd("d", -1, DateAdd("m", 1, Me!txtStart))
End Sub
|
コンボボックスのリスト内容をオプションボタンで切り替える |
Private Sub fraArea_AfterUpdate()
'オプショングループの更新後処理
Select Case Me!fraArea
Case 1
Me!cboKen.RowSource = "群馬;栃木;茨城"
Case 2
Me!cboKen.RowSource = "埼玉;東京;神奈川;千葉"
Case 3
Me!cboKen.RowSource = "新潟;長野;山梨"
End Select
End Sub
※この場合、コンボボックスの「値集合タイプ」プロパティをあらかじめプロパティシートで”値リスト”に設定しておく必要があります。
|
コンボボックスの入力をチェックする |
Private Sub cboKen_NotInList(NewData As String, Response As Integer)
'コンボボックスのリスト外入力時
Beep
MsgBox "入力されたデータ '" & NewData & "' はリストに登録されていません!", _
vbOKOnly + vbExclamation
'Accessのメッセージを出さないようにします
Response = acDataErrContinue
End Sub
※この場合、コンボボックスの「入力チェック」プロパティをあらかじめプロパティシートで”はい”に設定しておく必要があります。
|
リストボックスのダブルクリックで[OK]ボタンを実行する |
Private Sub lstデータ5_DblClick(Cancel As Integer)
'リストボックスのダブルクリック時
cmdOK_Click
End Sub
|
マウス移動でラベルの標題を変更する |
Private Sub lblMessage_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'ラベルのマウスボタン移動時
Me!lblMessage.Caption = "ボタンが移動しました!"
End Sub
Private Sub 詳細_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'詳細セクションのマウスボタン移動時
Me!lblMessage.Caption = "ここにマウスを移動してみてください!"
End Sub
※AccessのVBAでは、そのコントロール上にマウスのポインタが来たことは検出されますが、離れたことはイベントとして検出されません。そこで、ラベルコントロールの周囲にある詳細セクションに移動したことをもって、ラベルからマウスが離されたと判断します。
|
|