AUTOCOMPLETAR COMBO

CAIO.FR.SP 04/01/2011 13:18:34
#361057
Galera preciso da ajuda de voces novamente!
tenho uma combobox preenchida com produtos cadastrados no meu sistema, e preciso que ao se digita na combo ela filtre seu conteudo de acordo com o digitado. ate ai tudo bem. tinha achado um codigo aqui no vbm que funcionava corretamente. mas tive que fazer algumas alterações pois as vezes tinha 2 produtos com o mesmo nome cadastrado entao resolvi colocar alem no nome do produtos, tambem o seu codigo, marca e valor.
de forma que fica assim na combo

codigo | produto - marca | valor

001 | celeron d - intel | R$ 150,00

eu preciso da ajuda de voces que quando o usuario digite o nome do produto a combo ordene sua lista por produtos que o nome comece pelo digitado, ignorando o codigo!

alguem ai tem alguma ideia?
EXPERT 06/01/2011 09:05:28
#361313
Resposta escolhida
Olá amigo ...

Bem ... o correto mesmo é vc corrigir a redundância no cadastro .... mas se não tiver jeito ... tenta colocar a descrição do produto primeiro e depois o código ...
Se estiver preenchendo o combo na mão ... define a ordem pela descrição crescente + o código

ORDER BY ProdDescricao, ProdCodigo
EXPOLETA 06/01/2011 15:12:13
#361393
Sub ProcuraCbo(Cbo As ComboBox)
Dim Pesq As String
Dim Aux As String
If Cbo.ListCount > 0 And Len(Cbo.Text) > 0 Then
x = Len(Cbo.Text)
Pesq = [Ô]N[Ô]
Aux = Cbo.Text
I = 0
For I = 0 To Cbo.ListCount - 1
If UCase(Aux) = UCase(Mid(Cbo.List(I), 1, x)) Then
Cbo.Text = Cbo.List(I)
Cbo.SelStart = x
Cbo.SelLength = Len(Cbo.Text) - x
Pesq = [Ô]S[Ô]
Exit For
End If
Next
If Pesq = [Ô]N[Ô] Then
ChvCbo = [Ô]N[Ô]
Cbo.Text = [Ô][Ô]
Else
ChvCbo = [Ô]S[Ô]
End If
Else
If Cbo.ListCount < 1 Then
Cbo.Text = [Ô][Ô]
End If
End If
End Sub

barbada
PARREIRA 06/01/2011 15:20:36
#361395
Crei esse codigo em algum modulo

Public Sub AutoProcura(cbo As ComboBox, KeyAscii As Integer)
Dim sBuffer As String
Dim lRetVal As Long

sBuffer = Left(cbo.Text, cbo.SelStart) & _
Chr(KeyAscii)

lRetVal = SendMessage((cbo.hwnd), CB_FINDSTRING, -1, ByVal sBuffer)

If lRetVal <> CB_ERR Then
cbo.ListIndex = lRetVal
cbo.Text = cbo.List(lRetVal)
cbo.SelStart = Len(sBuffer)
cbo.SelLength = Len(cbo.Text)
KeyAscii = 0
End If


No evendo do KeyPress do combo colo isso

AutoProcura CBO_Unidade, KeyAscii

Ficaria assim.

Private Sub CBO_unidade_KeyPress(KeyAscii As Integer)
AutoProcura CBO_Unidade, KeyAscii
End Sub


Para qualquer combo que tiver sempre no evento keypress chame ele do jeito acima.
EXPOLETA 06/01/2011 15:45:40
#361404
O MEU CODIGO DE CIMA , EH NO EVENTO CHANGE MESMO.
Tópico encerrado , respostas não são mais permitidas