ComboBox chiudere Elenco Valori da Vba

di By65Franco il
6 risposte

Salve a tutti 

Descrizione:

  • IdProduct è una combobox inserita in una form in visualizzazione Foglio Dati ed è un campo del recordsource
    • consente solo elementi presenti nell'elenco
    • non consente modifiche all'elenco
    • non consente valore null
    • ha due colonne di cui la prima lunghezza = 0 (non visibile = Id key primaria)
    • colonna associata = 1 (espone il codice del prodotto di tipo string)
  •  Se immesso un valore non presente nell'elenco allora si apre la form di ricerca prodotti
    • se da ricerca viene ritornato un valore valido allora si assume il valore e si procede all'inserimento del record
    • se dalla ricerca non viene selezionato nessun prodotto allora esegui Undo per ripristinare la combobox

Problema: 

Quando ritorna dalla ricerca senza aver selezionato nessun prodotto:

Me.Undo elimina i caratteri di ricerca immessi nella combobox (e questo va bene sia in fase di edit che di insert record)

Ma non riesco a chiudere l'elenco della combobox. 

Ho provato di tutto, con setfocus sulla combo, con setfocus su un altro controllo e poi a ridare il focus alla combo, con cancelevents, con Dropdown… etc..
ma niente da fare, la combobox si ripresenta sempre con l'elenco aperto.
Solo con il SendKeys "{ESC}" riesco a chiudere l'elenco, ma questo metodo proprio non mi piace.  Esiste un metodo più ortodosso? 

Questo la routine dove nell' Else della IF devo resettare la combobox così come se non fosse mai successo nulla :

' SET SEARCH
Private Sub IdProduct_NotInList(NewData As String, Response As Integer)
' run search
lngIdProductSearch = 0
DoCmd.OpenForm "Frm_ProductSelect", acNormal, , , , acDialog, NewData
' set return value search
If lngIdProductSearch <> 0 Then
   Me.IdProduct = lngIdProductSearch
   ' retrive price
   MyRetrivePrice
   Me.DocQuantity.SetFocus
Else
   Me.Undo
   SendKeys "{ESC}"
End If
' set response
Response = acDataErrContinue
End Sub

esempio:

Ricerca prodotti "mele"

Dalla ricerca non ho selezionato nulla e quindi ritorno all'inserimento… e l'elenco rimane aperto (noto anche 
che si è posizionato sull'ultimo elemento della combobox)

Ma come caspiterina si chiude sto coso ;))


Grazie !

6 Risposte

  • Perché fai l'undo Della form e non della Combo…?

  • 25/06/2023 - @Alex ha scritto:


    Perché fai l'undo Della form e non della Combo…?

    Grazie @Alex, correggo subito …  'na svista clamorosa ;))

  • 25/06/2023 - @Alex ha scritto:


    Perché fai l'undo Della form e non della Combo…?

    Sistemata la svista per undo

    Ma secondo te c'è la possibilità di chiudere questa combobox senza utilizzare sendkeys ?

  • Certo… puoi inviare il messaggio CB_SHOWDROPDOWN con la SendMessage

  • 25/06/2023 - oregon ha scritto:


    Certo… puoi inviare il messaggio CB_SHOWDROPDOWN con la SendMessage

    Ciao,

    avevo verifica con  Me.IdProduct.Dropdown  però non ha effetto. 

    Che nell'evento  Private Sub IdProduct_NotInList  non abbia effetto ? 

  • 25/06/2023 - oregon ha scritto:


    Certo… puoi inviare il messaggio CB_SHOWDROPDOWN con la SendMessage

    Fosse semplice come in VB6… sarebbe vero… ;-)

    Purtroppo il VB di Access non agevola nella ricerca dell'hWnd… risulta un poco più complicato ma è fattibile.

    In sostanza serve cercarlo tra i Child della Form con il ClassName dell'oggetto dopo essersi accertati che abbia il Focus.

    Saluti

Devi accedere o registrarti per scrivere nel forum
6 risposte