NAO DIGITAR ERRADO E GANHAR FOCO COMBOBOX

ADILSOO 12/07/2012 08:09:07
#405903
Bom dia gente....
Dessa vez queria saber como que posso fazer para que na hora de digitar em um combobox, ele não perminitr que digite algo que não tenha adicionado no combobox, e eu também dei um F4 para abrir automaticamente quando ganhar o foco, mas queria que quando ganhasse o foco e abrisse ele já selecionasse o promeiro item do combobox, não sei se fui bem claro, mas é isso...

Desde já muito obrigado a todos.
MARCELO.TREZE 12/07/2012 09:36:32
#405906
Primeiro eu prefiro não permitir digitação no combo, então defino style como 2 - dropdown list, para selcionar o primeiro item do combo, basta colocar no gotfocus o seguinte

combo1.listindex = 1
ADILSOO 12/07/2012 10:06:35
#405908
Sim Marcelo, seria uma alternativa, mas e no caso pra filtrar os dados? é aí que ta dificil... Pois se eu não digitar não tem como filtrar...
MARCELO.TREZE 12/07/2012 11:10:38
#405912
não na realidade não tem como filtrar, porém se você colocar uma função para filtrar ao se digitar errado nada aparecerá no combo, isso claro dependendo da função.

são muitos itens no combo?
ADILSOO 12/07/2012 11:26:38
#405913
A depende do tipo de cadastro que o usuário cadastra, por exemplo o combo que carrega os funcionários cadastrados passa dos 200, eu até tenho uma rotina que faz isso, eu tava la quebrando a cabeca tentando usar a mesma mas não consegui não, pois essa que eu tenho é do DBCombo, no DBCombo funciona perfeito, ele vai filtrando, auto preenchendo e se digita uma letra ou numero que não tem no Dbcombo ele não digita nada, tipo um KeyAscii = 0, com o ComboBox até filtra, auto preenche, só que se o usuário digitar algo errado ele não vai impedir que ele prossiga, eu até tentei fazer uma POG e até deu certo, ao sair do combo eu verifico se o texto digitado no combo existe no cadastro se não ele apaga o combo e volta com o foco, mas como tem esse jeito pra fazer com o DBCombo então acho que deve ter também no ComboBox.
MARCELO.TREZE 12/07/2012 13:20:28
#405920
mas se você vai exibir o cadastro de varios funcionários, eu acho que o combo não é o ideal

o ideal seria um flexgrid ou até mesmo um listbox, ai o filtro ficaria lega de se fazer

ADILSOO 12/07/2012 13:35:32
#405923
Não Marcelo, exemplo, eu não quero exibir todos os funcionários, eu quero selecionar um funcionários em uma lista de funcionários cadastrados... igual nesse exemplo, quero selecionar uma cidade em uma lista de 5000 cidades do Brasil, aí quando eu seleciono a cidade ele me da o código da cidade, sendo que eu vou somente gravar o código...
ADILSOO 12/07/2012 21:00:36
#405972
Olha, não sei se é aqui, mas pelo que vi é aqui que se vê se realmente existe um item igual no combo
 Dim dcbo As ComboBox
Dim KeyAscii As Integer
Dim buffer As String

buffer = Left(dcbo.Text, dcbo.SelStart) & Chr(KeyAscii)

Mas não consigo fazer funcionar nem a pau!
MARCELO.TREZE 12/07/2012 21:39:09
#405976
adilso minha sugestão

Colque um listbox em baixo de um textbox, mude a propriedade visible deste listbox para false, depois no evento keypress ou change coloque a propriedade vsible do listbox para true, simulando um combo, preencha o listbox com as cidades e seus códigos no item data de cada linha. por exmeplo, coloque em um form um listbox, dois textbox e mude a propriedade do visible do list para false, e coloque-o abaixo do textbox, e veja o resultado com o código abaixo.

Private Sub Text1_Change()
List1.Visible = True
Dim A As Integer
Dim Achou As Boolean

Achou = False
listartudo

If Trim$(Text1) = [Ô][Ô] Then List1.ListIndex = -1: listartudo: Exit Sub

For A = List1.ListCount - 1 To 0 Step -1
If LCase$(Left(List1.List(A), Len(Text1))) = LCase$(Trim$(Text1)) Then
List1.ListIndex = A
Achou = True
Else
List1.RemoveItem A
End If
Next

If Achou = False Then
List1.ListIndex = -1
listartudo
End If
End Sub


Private Sub Text1_LostFocus()
List1.Visible = False
End Sub


Sub listartudo()
List1.Clear
List1.AddItem [Ô]jaguariuna[Ô]
List1.AddItem [Ô]sapucaia[Ô]
List1.AddItem [Ô]terere[Ô]
List1.AddItem [Ô]santos[Ô]
List1.AddItem [Ô]são vicente[Ô]
List1.AddItem [Ô]cubatão[Ô]
List1.AddItem [Ô]praia grande[Ô]
List1.AddItem [Ô]diadema[Ô]
List1.AddItem [Ô]são bernardo[Ô]
List1.AddItem [Ô]sao caetano[Ô]
List1.AddItem [Ô]piracicaba[Ô]
List1.AddItem [Ô]suzano[Ô]
End Sub



ADILSOO 13/07/2012 08:25:31
#405987
Fala Marcelo Blz? Então cara, fazendo assim eu acho mais prático colocar direto no lostfocus uma rotina pra verificar se o texto digitado no combo existe no cadastro, se o usuário digitou identico sem problemas ou se ele selecionou um da lista também não vai ter problemas, agora se ele digitar algo que não tenha no cadastro, ele simplesmente apaga o combo e volta o foco no mesmo abrindo a lista novamente com o F4, assim o usuário consegue ver que foi digitado errado e não consegue sair do combo a não ser que digite correto ou deixe ele sem texto nenhum, e na hora de gravar eu verifico se está vazio se sim eu não gravo, é dessa forma que eu tenho feito, mas como eu disse, acho que deve ter alguma outra forma de se impedir que o usuário digite um novo caracter errado, e não deixar ele digitar e verificar ao sair, mas blz, se alguém souber de alguma forma de fazer, e muito obrigado Marcelo, não que do seu jeito não funciona, mas assim acho mais simples, obrigado mesmo, valeu.
Tópico encerrado , respostas não são mais permitidas