2012-05-17 15 views
6

C# WinForms: ho usato un Combobox con queste proprietà: DropDownStyle: DropDown AutoCompleteSource: ListItems AutoCompleteMode: SuggestAppendAvere una casella combinata di completamento automatico che non permette di testo personalizzato

così ora quando digito combobox, esso suggerisce articoli dalla lista dei suoi articoli. Buono. Ma il problema è che non voglio essere in grado di digitare quello che voglio, voglio solo essere in grado di digitare dagli elementi validi che sono nella sua lista. Come posso risolvere questa parte?

Grazie.

risposta

5

Avresti per popolare le Elementi lista con i propri valori (manualmente o tramite l'associazione dati), e quindi impostare DropDownStyle-DropDownList.

La casella Combo non ha l'aspetto di una casella di testo, ma quando è attiva, digitandola si seleziona automaticamente la corrispondenza migliore dall'elenco degli elementi.

(Questo è il metodo consigliato per impostare un Combobox per non permettere il testo personalizzato.)

In alternativa, se si desidera lo stile di essere DropDown, catturare l'evento KeyPress del controllo, e fare un rapido controllo del testo del controllo più e.KeyChar e, se non è presente nell'elenco, impostare e.Handled = True. Questo bloccherà tutti i tasti premuti che risulterebbero in una parola che non è nella lista.

+1

grazie ma quello non funziona. Sì, impedirà di digitare ciò che ci piace ma interromperà anche AutoCompletion. Ancora possiamo digitare ma SEMPRE mostrerà l'intera lista e non li filtrerà. – Bohn

+0

Aggiunta un'altra soluzione. – MCattle

+0

buon trucco, proverò ora. – Bohn

0

Il controllo casella combinata non supporta direttamente questo.

È necessario scrivere gestori per verificare che un elemento dell'elenco sia stato immesso e richiedere all'utente in caso contrario.

0

Non è esattamente come il completamento automatico, ma se si imposta DropDownStyle su DropDownList, consentirà solo le voci presenti nella raccolta Articoli. Tuttavia, il comportamento predefinito di questa modalità è che ogni lettera digitata salta alla prima corrispondenza che inizia con quella lettera. Pertanto, se si desidera consentire loro di continuare a digitare caratteri aggiuntivi oltre la prima lettera, è possibile impostare AutoCompleteSource su ListItems e quindi impostare AutoCompleteMode su Append.

0

Un'altra opzione potrebbe essere la registrazione all'evento TextChanged o TextUpdated e nel caso in cui il testo già digitato non soddisfi le condizioni, modificarlo in modo appropriato.

1

Questo abbinamento con le stringhe nella casella combinata funziona.

int index = combobox1.FindString(combobox1.Text); 
    if (index < 0) 
    { 
    MessageBox.Show("Invalid Record"); 
    combobox1.Focus(); 
    return; 
    } 
Problemi correlati