0

ユーザーがコンボボックスに単語を入力し始めたときに、最初からではなく、文字列の任意の部分から一致を自動検索して見つけるにはどうすればよいですか?

たとえば。ユーザーが「001007228」と入力し始めると、絞り込まれた選択結果として「GEM GRAVURECOINC - 001007228」が表示されます。それ以外の場合、ユーザーが「Gravure」と入力すると、コンボボックスの値のリストから絞り込まれた選択肢として「GEM GRAVURECOINC - 001007228」が表示されます。

一部のユーザーは、名前の一部や末尾の数字を覚えている場合があります。

4

2 に答える 2

0

データベースで VBA コードを使用して KeyPress イベントをトラップする必要があります。

ALT-F11 を押してデータベースの背後にあるコードを表示し、次のようなものを使用します..

Private Sub Combo2_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
        Case 48 To 57, 65 To 90, 97 To 122 'alphachars only
            Combo2.ListIndex = FindIndex(Combo2.Value, KeyAscii)
        Case vbKeyDecimal
        Case vbKeyBack
        Case vbKeyRight
        Case vbKeyLeft
        Case vbKeyInsert
        Case vbKeyDelete
        Case vbKeyShift
        Case Else
            KeyAscii = 0
            Exit Sub
    End Select
End Sub

「cboYourCombo」は、実際のコンボ ボックス コントロールの実際のオブジェクト名です。

そして、上記のサブルーチン内で、数字や文字などの重要なキーストロークをトラップします

この行...

    Combo2.ListIndex = FindIndex(Combo2.Value, KeyAscii)

... FindIndex() 関数を実行しようとしており (記述する必要があります)、文字列内の文字の開始位置を返し、コンボボックスのインデックスをその位置から開始するように設定していると言っています。実際にはこれは機能しませんが、アイデアはわかります。

実際には、FindIndex() 関数で目的のデータの場所を検索し、検索した場所より前の文字を返すルーチンに、コンボボックス内のリスト全体を渡す必要があります。本質的には、フィールドの左から右に見るようにコンボボックスに指示していますが、上記のルーチンでデータの場所を既に見つけています。

すなわち。

このリストがあるとしましょう...

ABC123
ABC456
AHJ738
BHS238
MKJ299

上記をコーディングすると、キーを押すたびに、上記のリストでその文字を持つ最初の項目が検索されます。この場合、数字の 7 としましょう。

'7' を押すと、ルーチンが 'AHJ738' 項目を見つけ、これがたまたまリストの 3 番目の項目になりました。

つまり、'AHJ7' (少なくとも) が返され、コンボボックスがだまされてフィールドの左側から検索されます。

つまり、コンボ ボックス コントロールには、テキスト ボックスの途中でキーストロークを探すための事前構築済みのメソッドがありません。これを行うことができる代替のコンボボックスコントロールをGoogleで検索しない限り、これは商用バリアントです。

于 2013-06-18T01:39:59.953 に答える