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

Mobin
fonte

Respostas:

300

Use a propriedade ComboStyle:

comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
Dan Walker
fonte
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;
}
Isuru
fonte
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 .)

Sumit Agrawal
fonte
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()
Sushil Jadhav
fonte