検証の動機
Accessフォームのコンボボックスに入力された文字列を含めたドロップダウンリストを生成したいが思惑通りのリストが表示されない。
なので、どんなイベントがどんな順序で発生し、いつ入力された値を得られるかを調べたかった。
結論
KeyDown -> KeyPress -> Change -> KeyUp の順でイベントが発生
Changeの段階で入力が参照できた
KeyUpの段階で必要な情報がそろった
前提
combo1という名前のコンボボックスを用意し、デバッグ用出力のみ記述したイベントプロシージャを用意。引数があればそれも表示。
例:KeyDownイベント
Private Sub combo1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim ProcName As String: ProcName = "combo1_KeyDown"
Debug.Print ProcName & " : Start"
Debug.Print KeyCode; " <== KeyCode"
Debug.Print Shift; " <== Shift"
Debug.Print Me.combo1; " <== Me.combo1"
Debug.Print Me.combo1.Text; " <== Me.combo1.Text"
Debug.Print Me.combo1.Value; " <== Me.combo1.Value"
Debug.Print ProcName & " : End"
End Sub
combo1にフォーカスがあり、何も入力されていない状態から開始。
結果
少ない試行で十分な結果が得られたので、全てのパターンは網羅していない。
わかりやすくするために、StartとEnd以外をインデント。
コンボボックスにフォーカスがあり、コンボボックス外をクリックしたとき
combo1_Exit : Start
0 <== Cancel
Null <== Me.combo1
<== Me.combo1.Text
Null <== Me.combo1.Value
combo1_Exit : End
combo1_LostFocus : Start
Null <== Me.combo1
<== Me.combo1.Text
Null <== Me.combo1.Value
combo1_LostFocus : End
コンボボックス外にフォーカスがあり、コンボボックスの入力欄をクリックしたとき
combo1_Enter : Start
Null <== Me.combo1
<== Me.combo1.Text
Null <== Me.combo1.Value
combo1_Enter : End
combo1_GotFocus : Start
Null <== Me.combo1
<== Me.combo1.Text
Null <== Me.combo1.Value
combo1_GotFocus : End
コンボボックスにフォーカスがあり、9
を入力したとき
KeyUpイベント時に必要な情報がそろう
combo1_KeyDown : Start
57 <== KeyCode
0 <== Shift
Null <== Me.combo1
<== Me.combo1.Text
Null <== Me.combo1.Value
combo1_KeyDown : End
combo1_KeyPress : Start
57 <== KeyAscii
Null <== Me.combo1
<== Me.combo1.Text
Null <== Me.combo1.Value
combo1_KeyPress : End
combo1_Change : Start
Null <== Me.combo1
9 <== Me.combo1.Text
Null <== Me.combo1.Value
combo1_Change : End
combo1_KeyUp : Start
57 <== KeyCode
0 <== Shift
Null <== Me.combo1
9 <== Me.combo1.Text
Null <== Me.combo1.Value
combo1_KeyUp : End