Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6]ComboBox e Completamento Automatico

Salve
Sto cercando di capire come risolvere il seguente problema:
Ho una ComboBox e vorrei permettere all'utente di scriverci e che avvenga un 
completamente automatico confrontando il testo inserito con i valori già 
presenti nella combo.
Fino a qui o risolto nel seguente modo: (lstautori è una Combo!!!!)
''''''''''''''''''''''''''''''''''''''''''''
Private Sub lstautori_KeyUp(KeyCode As Integer, Shift As Integer)
On Error GoTo Errore
Dim lung As Integer
If KeyCode <> 8 Then
lung = Len(lstautori)
    If lung > 0 Then
        SQL = ""
        SQL = SQL & "SELECT idautore,"
        SQL = SQL & "                 autore "
        SQL = SQL & "FROM   AUTORI "
        SQL = SQL & "WHERE autore LIKE " & vbapc & lstautori & "%" & vbapc & 
" "
        SQL = SQL & ";"
        controllo_rst2
    If rst2.EOF = True Or rst2.BOF = True Then
        MsgBox "L'autore non esiste!!!"
        Exit Sub
    End If
        lstautori = notnull(rst2![autore])
        lstautori.SelStart = lung
        lstautori.SelLength = Len(lstautori) - lung
        lstautori.ItemData(lstautori.ListIndex) = notnull(rst2![autore])
    End If
End If
Exit Sub
Errore:
Exit Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''
Il problema è che quando ho finito di scrivere il testo se non apro e chiudo 
la combo il valore listindex non viene assegnato!!!!!!
Come posso ovviare a questo problema????
Grazie

la combo il valore listindex non viene assegnato!!!!!!
Perchè in realtà non hai selezionato un valore.
Intanto di quanti autori stiamo parlando? Io li caricherei tutti nella
combo e poi userei l'evento KeyUp per scorrerli tutti nella lista
cercando il primo che inizia con il testo digitato e lo selezionerei
con lstautori.ListIndex = iIndex dove iIndex è l'indice nella lista
trovato scorrendola.
Ciao
-- 
Fritz
Togli *ERASE* per rispondere in e-mail.

FAte finta che non c'č "lstautori.ItemData(lstautori.ListIndex) = 
notnull(rst2![autore]) "
Cmq Se apro e chiudo la combo il valore viene memorizzato
A questo Punto mi chiedo:
E' possibile aprire e chiudere la combo senza far notare nulla all'utente?
Vi ricordo che la combo contiene molti autori!!!
Considerando che ci sono 9000 libri ed ogni libro puņ avere fino a 3 autori.

 E' possibile aprire e chiudere la combo senza far notare nulla all'utente?
Apparte il discorso di 9mila elementi in una combo non mi pare proprio
comodo comunque...
C'è qualcosa di automatico che lo farebbe:
In un form metti una combo e una textbox su cui posare il focus e incolla
questo:
***************************
Private Declare Function SendMessageString Lib "user32" Alias
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As
Long, ByVal lParam As String) As Long
Private Const CB_FINDSTRING = &H14C
Private blnDelete As Boolean
Private Sub Combo1_Validate(Cancel As Boolean)
  nRet = SendMessageString(Combo1.hwnd, CB_FINDSTRING, 0, Combo1.Text)
  'Debug.Print Combo1.Text
  nSelStart = Combo1.SelStart
  If nRet < 0 Then
    MsgBox "no"
    Combo1.Text = ""
  Else
    MsgBox "si"
  End If
End Sub
Private Sub Form_Load()
Combo1.Clear
Combo1.AddItem "PIPPO"
Combo1.AddItem "PLUTO"
Combo1.AddItem "PAPERINO"
End Sub
Private Sub Combo1_Change()
  Dim nRet As Long
  Dim nSelStart As Long
  If blnDelete Then Exit Sub
  nRet = SendMessageString(Combo1.hwnd, CB_FINDSTRING, 0, Combo1.Text)
  'Debug.Print Combo1.Text
  nSelStart = Combo1.SelStart
  If nRet >= 0 Then
    Combo1.ListIndex = nRet
    Combo1.SelStart = nSelStart
    Combo1.SelLength = Len(Combo1.Text)
  End If
End Sub
Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
  Select Case KeyCode
    Case vbKeyDelete, vbKeyBack
      blnDelete = True
    Case Else
      blnDelete = False
  End Select
End Sub
**************************
-- 
DBMS Firebird
VB6 + Ado

Non ho risolto nulla......
il valore listindex rimane a -1
"Andrea [Work]" <nos...@invalid.invalid> ha scritto nel messaggio 
news:1srw3v3ysqadk.19m4b4fvpbd3e$.dlg@40tude.net...


 il valore listindex rimane a -1
Per favore cerca di quotare bene.
Hai visto/provato come funziona l'esempio?
Implica che la combo sia pre-caricata con i valori e non agganciata ad un
recordset con l'ItemData 
(o comunque non è detto che funzioni in tal modo).


Rispiego un 'altra volta.
Quando devo salvare la scheda del libro il valore che attribuirò all'utente 
sarà il suo id, che trovo in
lstautori.itemdata(lstautori.listindex)
Ma nel momento in cui  faccio il completamento automatico, il valore 
presente nella proprietà text della combo non viene agganciato a nessun 
valore presente all'interno della stessa.
Risultato: la combo rimane con il listindex a -1.
"Andrea [Work]" <nos...@invalid.invalid> ha scritto nel messaggio 
news:1r45so059on1h.1...@40tude.net...
