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.

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.


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;

33

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



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;
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.