Evento SelectionChangeCommitted del Combobox non aggiorna il testo visualizzato

di il
2 risposte

Evento SelectionChangeCommitted del Combobox non aggiorna il testo visualizzato

Gentili,
sono bloccato su una cosa penso stupida, mettendo le mani su codice scritto da un altro (tra l'altro molto più bravo di me).
Ho una form con una combobox che viene "bindata" all'apertura della form con una lista di clienti (DisplayMember = idAnag e ValueMember = Descrizione).
Selezionando un cliente da questa lista vengono popolati correttamente alcuni altri controlli textbox.
La procedura per popolare questi clienti è tutta asincrona e viene chiamata dall'evento SelectionChangeCommitted della combo modificato come async perché appunto richiama un metodo asincrono con await metodo();
Di seguito il codice:

private async void cbxCliente_SelectionChangeCommitted(object sender, EventArgs e)
{            
   await PopolaPromemoriaAsync(cbxCliente.SelectedValue as int?);            
}
Il metodo funziona e popola correttamente tutto, solo che aggiorna il testo della combobox solo la prima volta che clicco sul menu a tendina, dopo rimane sempre il primo cliente selezionato anche se l'evento viene correttamente gestito.
Se cancello il metodo inserito nell'evento, cioè richiamo l'evento vuoto mi aggiorna sempre correttamente il testo visualizzato.
Se invece utilizzo l'evento SelectedIndexChanged() non ci sono problemi di aggiornamento ed il metodo funziona sempre, ma vorrei capire il perché di questo comportamento anomalo anche perché non vorrei che il programmatore di prima avesse scelto proprio SelectionChangeCommitted() per qualche motivo particolare, e trovarmi poi dei comportamenti strani.

2 Risposte

  • Re: Evento SelectionChangeCommitted del Combobox non aggiorna il testo visualizzato

    SelectedIndexChanged() e SelectionChangeCommitted(), il primo scatena l'evento immediatamente, il secondo solo dopo che il combobox è stato aggiornato nel form.
    Non dovresti vedere differenze, ma considerato che l'evento richiama delle procedure asincrone, un'ipotesi è che il tuo PC ha una velocità diversa da quella del precedente programmatore che genera risultati diversi da quelli aspettati, quali dei due metodi è il più adeguato lo devi scoprire facendo dei test su pc datati e moderni, il programma deve funzionare in ambedue gli ambienti.
  • Re: Evento SelectionChangeCommitted del Combobox non aggiorna il testo visualizzato

    Salve Rubik,
    intanto grazie mille per la risposta.
    Ho effettuato svariate prove ma non sono riuscito veramente a capire il problema.
    Siccome ho visto che solo la prima volta viene effettuato l'aggiornamento del testo visualizzato nella combo, quando cioé la proprietà SelectedIndex passa da -1 e la proprietà Text è una stringa vuota prima di lanciare il metodo asincrono faccio così:
    
    cbxCliente.Text = string.Empty;
    await PopolaPromemoriaAsync(cbxCliente.SelectedValue as int?);
    
    Per il momento lascio così poi vedrò di capire meglio il problema.
    Grazie ancora per gli input.
    Lucius
Devi accedere o registrarti per scrivere nel forum
2 risposte