|
|
|
|
|
Dicas
|
|
Visual Basic (Miscelâneas)
|
|
|
Título da Dica: Busca automática em uma combobox usando API
|
|
|
|
Postada em 29/1/2007 por Álvaro
Fácil e rápido
Primeiro adicione um módulo e nesse módulo coloque o comando #If Win32 Then Declare Function SendMessage Lib "User32" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long #Else Declare Function SendMessage Lib "User" _ (ByVal hWnd As Integer, ByVal wMsg As Integer, _ ByVal wParam As Integer, lParam As Any) As Long #End If
No formulário No combo que deseja a busca, entre no evento keyascii e coloque o código abaixo e apenas um alerta, na tela de propriedade do combo coloque a opção - Sorted=True, ela vem false como default 'se o usuário digitar enter, significa q ele quer incluir o fornecedor, senão ele vai continuar a buscar o fornecedor a medida que o usuário for digitando o nome If KeyAscii = 13 Then ' nesse exemplo eu inclui os dados no meu banco If CboFornecedor.Text = "" Then MsgBox "Selecione e/ou digite um fornecedor da lista", vbInformation Else Itens.AddNew Itens!CodItem = TxtCodItem.Text Itens!NCadastro = LblCadastro.Caption Itens!Descricao = TxtDescricao.Text Itens!Fornecedor = CboFornecedor.Text Itens!DataUltimaCompra = Date Itens!DataCadastro = Date Itens.Update MsgBox "Fornecedor incluído com sucesso", vbExclamation If MsgBox("Deseja incluir mais fornecedores para esse item", vbQuestion + vbYesNo) = vbYes Then Seleciona = False CboFornecedor.Text = "" CboFornecedor.SetFocus Exit Sub Else TxtCodItem.Text = "" TxtDescricao.Text = "" CboFornecedor.Text = "" ProximoRegistro TxtCodItem.SetFocus Exit Sub End If End If End If 'Aqui ele faz a busca do fornecedor a cada letra digitada e exibi o resultado no combo Dim CB As Long Dim FindString As String Const CB_ERR = (-1) Const CB_FINDSTRING = &H14C If KeyAscii < 32 Or KeyAscii > 127 Then Exit Sub If CboFornecedor.SelLength = 0 Then FindString = CboFornecedor.Text & Chr$(KeyAscii) Else FindString = Left$(CboFornecedor.Text, CboFornecedor.SelStart) & Chr$(KeyAscii) End If CB = SendMessage(CboFornecedor.hWnd, CB_FINDSTRING, -1, ByVal FindString) If CB <> CB_ERR Then CboFornecedor.ListIndex = CB CboFornecedor.SelStart = Len(FindString) CboFornecedor.SelLength = Len(CboFornecedor.Text) - CboFornecedor.SelStart Else 'se ele não achar o texto digitado no combo Beep 'emiti um som MsgBox "Favor verificar, descrição não encontrada", vbInformation End If KeyAscii = 0
|
|
|
|
|