如何禁用C#中的组合框中的元素编辑?


157

我在ComboBox(带有C#的WinForms)中有一些元素。我希望它们的内容是静态的,以便用户在运行应用程序时无法更改内部的值。我也不希望用户向ComboBox添加新值

Answers:


300

使用ComboStyle属性:

comboBox.DropDownStyle = ComboBoxStyle.DropDownList;

38
也可以在设计器的属性窗口中进行设置。
Jeffrey

3
对于最新版本,您可以使用combo.Properties.TextEditStyle = DisableTextEditor
Keysharpener

21

这是我使用的另一种方法,因为更改DropDownSyleDropDownList使其看起来像3D,有时看起来很丑陋。

您可以通过KeyPress像这样处理ComboBox 的事件来阻止用户输入。

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

4
您可以在设计器FlatStyle中更改其外观:)
StinkyCat 2013年

3
@StinkyCat不会更改弹出列表的外观,仅更改表单中的控件。
Logarr

您还必须在您具有选项的地方处理右键菜单Paste。我不知道现在怎么样。
Sinatr

3
好的,要删除它,Paste您将必须创建伪造的空上下文菜单并将其分配给ComboBox。
Sinatr


0

我尝试了ComboBox1_KeyPress,但它允许删除字符,您也可以使用复制粘贴命令。我的DropDownStyle设置为DropDownList,但仍然没有用。所以我做了以下步骤,以避免组合框文本编辑。

  • 下面的代码处理删除和退格键。并且还会禁用与控制键的组合(例如ctr + C或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
    
  • 在表单加载中,使用以下行禁用右键单击组合框控件,以避免通过鼠标单击进行剪切/粘贴。

    CmbxInType.ContextMenu = new ContextMenu()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.