2011-01-13 12 views
0

LIKEクエリを使用してフォームのデータをフィルタリングするために使用するフォームウィッチのテキストボックス(そのIDに "D_find")があります。キーアップで更新イベントが発生する

私は次のコードを持っている:

Private Sub D_find_AfterUpdate() 

    Dim fil 

    fil = Me.D_find 

    If fil = Null Then 
     fil = "" 
    End If 

    Me.Filter = "DeloN Like '" + fil + "*'" 

End Sub 

私はタブを押すか、フォーム上のいくつかの他のコントロールにフォーカスが、私はすぐにテキストボックスのからkeyupイベントの後にフィルタを適用する必要がある場合、それが正常に機能していますが、私はそれに傾きますD_find_keyupでこのコードを使用すると、は常にになります.D_findはNULLですが、現在のシナリオでは空でない限り常にNULLになりません。

現在のシナリオに存在する第二のトラブル:AfterUpdateを焼成し、フィルタが適用された後、D_findテキストボックス内のテキストの色が白になるだろうと私は、このテキストボックス(D_find)中のsomethinを入力するか、テキストの一部を切断した後、それは黒にロールバックしを。

-
私の悪い英語を申し訳ありません。

答えて

0

テキストボックスは、まだフォーカスがある場合は、使用することができます。

NameOfControl.Text 

これは、先ほど入力したテキストが含まれています。ただし、フィルタをすぐに適用する必要がある理由は、Afterupdateではすべてのデータが確実に入力され、検索コントロールにフォーカスを戻すことができるため、安全です。

EDIT REがテキストボックス、txtSearch、およびリストボックスを使用し

コメント、lstCompanies次のコードは、上記に示す:

Private Sub txtSearch_Change() 
s = "SELECT Key, Company " _ 
    & "FROM tblCompanies " _ 
    & "WHERE Company LIKE '*" _ 
    & Replace(Me.txtSearch.Text, "'", "''") & "*'" 

Me.lstCompanies.RowSource = s 
End Sub 

リストボックスは、文字がtxtSearchに追加されるにつれて徐々に減少リストを返します。

+0

AfterUpdateを使用しても問題なく動作しますが、「遅すぎます」。私は "ライブフィルタ"が必要です。 NameOfControlのChangeまたはKeyUpイベントを使用する場合、NameOfControl.TextまたはNameOfControl.Valueには常にNullがあります。また、NameOfControl.SetFocusを使用して値を読み取る前にNullも受け取ります。 –

+0

私はさらにノートを追加しました。それがあなたのために働かないなら、他の根本的な問題があるかもしれません。多くの場合、新しいフォームでテストする価値があります。 – Fionnuala

関連する問題