Como posso tornar uma ComboBox não editável no .NET?

205

Eu quero ter um "somente selecionar" ComboBoxque forneça uma lista de itens para o usuário selecionar. A digitação deve estar desabilitada na parte do texto do ComboBoxcontrole.

Minha pesquisa inicial sobre isso resultou em uma sugestão excessivamente complexa e equivocada para capturar o KeyPressevento.

Cory Engebretson
fonte

Respostas:

378

Para tornar a parte do texto de uma ComboBox não editável, defina a propriedade DropDownStyle como "DropDownList". A ComboBox agora é essencialmente apenas de seleção para o usuário. Você pode fazer isso no designer do Visual Studio ou em C # assim:

stateComboBox.DropDownStyle = ComboBoxStyle.DropDownList;

Link para a documentação para a propriedade ComboBox DropDownStyle no MSDN.

Cory Engebretson
fonte
8
Uma coisa a ter em mente Fazer isso significa que você não pode mais atualizar a Textpropriedade programmically, estava usando-o para mostrar uma mensagem padrão usandoComboBox.SelectedIndex = -1;
Lankymart
Existe uma maneira de fazer isso através da GUI do Visual C # sem precisar editá-lo no código? Parece um 'valor padrão' seria uma coisa normal querer configurar
muzzlator
6
Como evito a aparência cinza?
Anders Lindén
2
@ AndersLindén defina a propriedade FlatStyle como Flat.
Xam
@Xam Então, para onde vai a fronteira? Ao pesquisar um pouco, parece que tenho que fazer o desenho sozinho para que pareça aceitável.
Anders Lindén
67

Para adicionar uma referência da GUI do Visual Studio, você pode encontrar as DropDownStyleopções em Propriedades da ComboBox selecionada:

insira a descrição da imagem aqui

O que adicionará automaticamente a linha mencionada na primeira resposta ao Form.Designer.cs InitializeComponent(), da seguinte forma:

this.comboBoxBatch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
invertigo
fonte
33

Fique na sua ComboBox e pesquise a propriedade DropDropStyle na janela de propriedades e escolha DropDownList .

LZara
fonte
2

COMBOBOXID.DropDownStyle = ComboBoxStyle.DropDownList;

Abhishek Jaiswal
fonte
1

Para continuar exibindo dados na entrada após a seleção, faça o seguinte:

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;
}
Diogo Rodrigues
fonte