Dovrei impostare in un combo di un form fatto con VB6 la funzione AutoExpand che solitamente utilizzo con ACCESS, come posso fare ?
Grazie
Dovrei impostare in un combo di un form fatto con VB6 la funzione AutoExpand che solitamente utilizzo con ACCESS, come posso fare ?
Grazie
Cerca di spiegarti meglio, altrimenti nn ti risponderà nessuno
OK, scusami, cerchero' di essere più chiaro.
Su ACCESS la guida per la proprietà EXPAND di un controllo COMBO dice:
Proprietà AutoExpand (Espansione automatica)
È possibile utilizzare la proprietà AutoExpand per specificare se in Microsoft Access venga riempita automaticamente la parte casella di testo di una casella combinata con un valore dell'elenco della stessa, corrispondente ai caratteri che vengono digitati nella casella combinata. In tal modo è possibile immettere rapidamente in una casella combinata un valore esistente senza visualizzare la parte casella di riepilogo. Elemento Boolean in lettura e scrittura.
Spero di essere stato abbastanza chiaro.
Grazie
Devi utilizzare l' API SendMessage.
Ciao, Brainjar
Grazie per la risposta, io ho provato ma non è lo stesso risultato.
Ciaoe e grazie
Quale 'risultato non è lo stesso' ?
La SendMessage fa miracoli !
Metti in un form una combo.
Nel form 'schiaffaci' questo codice :
Prova a scrivere nella combo.codice:Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) _ As Long Const CB_ERR = (-1) Const CB_FINDSTRING = &H14C Private Sub Form_Load() Combo1.AddItem "French fries" Combo1.AddItem "Hamburgers" Combo1.AddItem "Milkshakes" Combo1.AddItem "Onion rings" Combo1.AddItem "Ice" Combo1.AddItem "Ice cream" End Sub Private Sub Combo1_KeyPress(KeyAscii As Integer) Dim CB As Long Dim FindString As String If KeyAscii < 32 Or KeyAscii > 127 Then Exit Sub If Combo1.SelLength = 0 Then FindString = Combo1.Text & Chr$(KeyAscii) Else FindString = Left$(Combo1.Text, Combo1.SelStart) & Chr$(KeyAscii) End If CB = SendMessage(Combo1.hwnd, CB_FINDSTRING, -1, ByVal FindString) If CB <> CB_ERR Then Combo1.ListIndex = CB Combo1.SelStart = Len(FindString) Combo1.SelLength = Len(Combo1.Text) - Combo1.SelStart End If KeyAscii = 0 End Sub
Ovvio che gli additem sulla combo li imposti come vuoi tu .....
Ciao, Brainjar
Se poi unisci i due suggerimenti che hai avuto da Oregon e Brainjar, avrai l'espansione e la selezione del termine in base alla prima lettera inserita, come segue:
codice:Option Explicit Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long Const CB_SHOWDROPDOWN = &H14F Const CB_ERR = (-1) Const CB_FINDSTRING = &H14C ' Carica la ComboBox ed inserisce il termine dalla prima lettera: Private Sub Form_Load() Combo1.AddItem "French fries" Combo1.AddItem "Hamburgers" Combo1.AddItem "Milkshakes" Combo1.AddItem "Onion rings" Combo1.AddItem "Ice" Combo1.AddItem "Ice cream" End Sub Private Sub Combo1_KeyPress(KeyAscii As Integer) Dim CB As Long Dim FindString As String If KeyAscii < 32 Or KeyAscii > 127 Then Exit Sub If Combo1.SelLength = 0 Then FindString = Combo1.Text & Chr$(KeyAscii) Else FindString = Left$(Combo1.Text, Combo1.SelStart) & Chr$(KeyAscii) End If CB = SendMessage(Combo1.hwnd, CB_FINDSTRING, -1, ByVal FindString) SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, 1, 0 If CB <> CB_ERR Then Combo1.ListIndex = CB Combo1.SelStart = Len(FindString) Combo1.SelLength = Len(Combo1.Text) - Combo1.SelStart End If KeyAscii = 0 End Sub
LM
Grazie 1000
Allora l'unico problema che mi è rimasto è il seguente.
il mio combo DEVE essere non troppo grande, mentre le voci che carico all'interno del combo solo molto lunghe, il problema è che quando seleziono una di queste voci nel combo vorrei vedere l'inizio della voce che devo caricare e non la fine.
Grazie![]()