2011-01-13 140 views
0

我在表單中使用LIKE查詢來過濾表單的數據,我的表單中有文本框(「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 

它正常工作,如果我按TAB或專注於形式的其他一些控制,但我需要立刻KEYUP文本框的事件之後應用過濾器,但我不能給它,因爲如果我在D_find_keyup中使用此代碼,我總是在中有 D_find爲NULL,但在當前情況下,它總是不爲null,除非它爲空。

當前場景中存在的第二個問題:在應用AfterUpdate開啓和過濾器後,D_find文本框中的文本顏色將變爲白色,並且在我在此文本框(D_find)中鍵入somethin或剪切某些文本後,它會回滾爲黑色。

-
對不起我的英文不好。

回答

0

如果文本仍然有焦點時,您可以使用:

NameOfControl.Text 

這將只包含輸入的文本。但是,爲什麼必須立即應用過濾器,在Afterupdate中更安全,因爲您可以確保輸入了所有數據,並且可以將焦點設置回搜索控件。

EDIT重新評論

使用文本框,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。 – 2011-01-13 05:08:42