|
|
Auto Complete combo Box(VB.NET Source Use API) |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hWndLock As System.IntPtr) As Long Private Structure SIZE Dim cx As Long Dim cy As Long End Structure Public Sub LockWindow(ByVal hwnd As System.IntPtr) Dim lRet As Long lRet = LockWindowUpdate(hwnd) End Sub Private Sub ReleaseWindow() Dim lRet As Long lRet = LockWindowUpdate(Nothing) End Sub Private Sub ComboDropdown(ByRef comboObj As ComboBox) Call SendMessage(comboObj.Handle, CB_SHOWDROPDOWN, 1, 0&) End Sub Private Sub ComboRetract(ByRef comboObj As ComboBox) Call SendMessage(comboObj.Handle, CB_SHOWDROPDOWN, 0, 0&) End Sub Public Function ComboAutoComplete(ByRef comboObj As ComboBox) As Boolean Dim lngItemNum As Long Dim lngSelectedLength As Long Dim lngMatchLength As Long Dim strCurrentText As String Dim strSearchText As string Dim sTypedText As String Const CB_LOCKED = &H255 Try With (comboObj) If .Text = Nothing Then Exit Function End If Call LockWindow(.Handle) If ((InStr(1, .Text, .Tag, vbTextCompare) <> 0 And Len(.Tag) = Len(.Text) - 1) Or (Left(.Text, 1) <> Left(.Tag, 1) And .Tag <> Nothing)) And .Tag <> CStr(CB_LOCKED) Then strSearchText = .Text lngSelectedLength = Len(strSearchText) lngItemNum = .FindString(strSearchText) ComboAutoComplete = Not (lngItemNum = -1) If ComboAutoComplete Then lngMatchLength = Len(.Items.Item(lngItemNum)) - lngSelectedLength .Tag = CB_LOCKED sTypedText = strSearchText .Text = .Text & Right(.Items.Item(lngItemNum), lngMatchLength) .SelectionStart = lngSelectedLength Dim Temp As Integer Temp = lngMatchLength .SelectionLength = Temp '.Text = .Text & Right(.Items.Item(lngItemNum), lngMatchLength) .Tag = sTypedText End If ElseIf .Tag <> CStr(CB_LOCKED) Then .Tag = .Text End If Call ReleaseWindow() End With Catch err As Exception MsgBox(err.Message & err.StackTrace) End Try End Function
|
|
相关文章:相关软件: |
|