Como desativar a edição de elementos na caixa de combinação para c #?


157

Eu tenho alguns elementos em uma caixa de combinação (WinForms com c #). Quero que o conteúdo deles seja estático, para que um usuário não possa alterar os valores internos quando o aplicativo for executado. Também não quero que o usuário adicione novos valores à ComboBox

Respostas:


300

Use a propriedade ComboStyle:

comboBox.DropDownStyle = ComboBoxStyle.DropDownList;

38
Isso também pode ser definido na janela de propriedades do designer.
28409 Jeffrey

3
Com versões recentes você pode usarcombo.Properties.TextEditStyle = DisableTextEditor
Keysharpener

21

Esse é outro método que eu uso, porque mudar DropDownSylepara DropDownListfaz com que pareça 3D e, às vezes, é simplesmente feio.

Você pode impedir a entrada do usuário manipulando o KeyPressevento da ComboBox dessa maneira.

private void ComboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
      e.Handled = true;
}

4
Você pode mudar sua aparência no designer, FlatStyle :)
StinkyCat

3
@StinkyCat Isso não altera a aparência da lista pop-up, apenas o controle no formulário.
Logarr

Você tem que lidar com o menu do botão direito, onde você tem a opção Pastetambém. Eu não tenho idéia de como agora.
Sinatr 17/04

3
Ok, para remover, Pastevocê precisará criar um menu de contexto vazio falso e atribuí-lo à ComboBox.
Sinatr

7

Você pode alterar o DropDownStyle nas propriedades para DropDownList. Isso não mostrará o TextBox para o filtro.

Propriedade DropDownStyle
(Captura de tela fornecida por FUSION CHA0S .)


0

Eu tentei o ComboBox1_KeyPress, mas ele permite excluir o caractere e você também pode usar o comando copy paste. Meu DropDownStyle está definido como DropDownList, mas ainda não serve. Então, fiz o passo abaixo para evitar a edição de texto da caixa de combinação.

  • O código abaixo lida com a tecla delete e backspace. E também desabilita a combinação com a tecla de controle (por exemplo, ctr + C ou ctr + X)

     Private Sub CmbxInType_KeyDown(sender As Object, e As KeyEventArgs) Handles CmbxInType.KeyDown
        If e.KeyCode = Keys.Delete Or e.KeyCode = Keys.Back Then 
            e.SuppressKeyPress = True
        End If
    
        If Not (e.Control AndAlso e.KeyCode = Keys.C) Then
            e.SuppressKeyPress = True
        End If
    End Sub
    
  • No carregamento de formulários, use a linha abaixo para desativar o botão direito no controle da caixa de combinação para evitar recortar / colar com o clique do mouse.

    CmbxInType.ContextMenu = new ContextMenu()
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.