Come posso rendere un ComboBox non modificabile in .NET?


205

Voglio avere un "solo selezione" ComboBoxche fornisce un elenco di elementi tra cui l'utente può selezionare. La digitazione dovrebbe essere disabilitata nella parte testuale del ComboBoxcontrollo.

Il mio googling iniziale di questo ha rivelato un suggerimento troppo complesso e fuorviato per catturare l' KeyPressevento.

Risposte:


378

Per rendere la parte di testo di un ComboBox non modificabile, impostare la proprietà DropDownStyle su "DropDownList". Il ComboBox è ora essenzialmente solo di selezione per l'utente. Puoi farlo nel designer di Visual Studio o in C # in questo modo:

stateComboBox.DropDownStyle = ComboBoxStyle.DropDownList;

Collegamento alla documentazione per la proprietà DropDownStyle ComboBox su MSDN.


8
Una cosa da tenere a mente facendo questo significa che non è più possibile aggiornare la Textproprietà a livello di ComboBox.SelectedIndex = -1;
codice

C'è un modo per farlo attraverso la GUI per Visual C # senza doverlo modificare nel codice? Sembra un 'valore predefinito' sarebbe una cosa normale da configurare
muzzlator

6
Come posso evitare l'aspetto grigio?
Anders Lindén,

2
@ AndersLindén imposta la proprietà FlatStyle su Flat.
X

@Xam Allora dove va il confine? Quando google un po ', sembra che devo fare il disegno da solo per farlo sembrare accettabile.
Anders Lindén,

67

Per aggiungere un riferimento alla GUI di Visual Studio, puoi trovare le DropDownStyleopzioni in Proprietà del ComboBox selezionato:

inserisci qui la descrizione dell'immagine

Che aggiungerà automaticamente la riga menzionata nella prima risposta a Form.Designer.cs InitializeComponent(), in questo modo:

this.comboBoxBatch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

33

Rimani su ComboBox e cerca la proprietà DropDropStyle dalla finestra delle proprietà, quindi scegli DropDownList .



1

Per continuare a visualizzare i dati nell'input dopo aver selezionato, procedere come segue:

VB.NET
Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress
    e.Handled = True
End Sub



C#
Private void ComboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = true;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.