'===========================================================================
' ファイル名 : frmAutoComp.frm
' ファイル説明 : オートコンプリートコンボボックス
' 作成者 : Uz
' E-Mail : uz@violet.plala.or.jp
' HomePage : http://www1.plala.or.jp
' 作成日 : 1998/02/11 (Wed)
' 修正日 : 1998/02/11 (Wed)
' 備考 : なし
'===========================================================================
Option Explicit
' -- API定数宣言
Private Const CB_FINDSTRING = &H14C
' -- API 関数宣言
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any _
) As Long
' -- 変数宣言
Private blnComboDelete As Boolean 'コンボボックスで文字が削除されたかどうかを
'Changeイベントで取得するための変数
' True - 削除されたことによるテキストの変化
' Flase - 何か入力されたことによるテキストの変化
'///////////////////////////////////////////////////////////////////////////
' 関数名 : cmbComboBoxChange(コンボボックスのChangeイベント)
' 目的説明 : 入力文字列をリスト内から検索し選択する
' Accessライクなコンボボックス(Accessにはこのような機能があるらしい)
' 前提条件 : なし
' 結果 : なし
' 引数 : なし
' 戻り値 : なし
' 備考 ; なし
'///////////////////////////////////////////////////////////////////////////
Private Sub cmbComboBox_Change()
Dim lSelStart As Long '現在のカーソル位置
If blnComboDelete Then
'このチェンジイベントが文字列の削除によって発生した時、処理を行わない
' これがないと(Delete,BackSpaceによる)文字の削除が出来ない
blnComboDelete = Not blnComboDelete
Else
' -- 検索処理
'現在のカーソル位置を保存
lSelStart = cmbComboBox.SelStart
'現在の文字列をもとに検索し選択状態にする
cmbComboBox.ListIndex = SendMessage(cmbComboBox.hwnd, CB_FINDSTRING, -1, ByVal cmbComboBox.Text)
'発見できれば
If cmbComboBox.ListIndex <> -1 Then
'カーソル位置を戻して
cmbComboBox.SelStart = lSelStart
'カーソル以降を選択状態に
cmbComboBox.SelLength = Len(cmbComboBox.Text)
End If
End If
End Sub
'///////////////////////////////////////////////////////////////////////////
' 関数名 : cmbComboBoxKeyDown(コンボボックスのChangeイベント)
' 目的説明 : 文字削除かどうかフラグを変更する
' 前提条件 : なし
' 結果 : なし
' 引数 : ※ヘルプ参照
' 戻り値 : なし
' 備考 ; なし
'///////////////////////////////////////////////////////////////////////////
Private Sub cmbComboBox_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyBack Or KeyCode = vbKeyDelete Then
'文字削除の時 フラグを真に
blnComboDelete = True
Else
'文字削除でない時 フラグを偽に
blnComboDelete = False
End If
End Sub
'///////////////////////////////////////////////////////////////////////////
' 関数名 : FormLoad(フォームロード)
' 目的説明 : コンボボックスの初期化
' 前提条件 : なし
' 結果 : なし
' 引数 : なし
' 戻り値 : なし
' 備考 ; なし
'///////////////////////////////////////////////////////////////////////////
Private Sub Form_Load()
'コンボボックスのリストを作成
With cmbComboBox
Call .AddItem("41050")
Call .AddItem("41060")
Call .AddItem("41070")
Call .AddItem("41080")
Call .AddItem("42010")
Call .AddItem("51100")
End With
End Sub
|