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

177

我在使用C#编写的WinForms应用程序中有一个ComboBox控件。 我希望其中的元素内容是静态的,这样用户在运行应用程序时就不能更改里面的值。 我也不想让用户添加新值到ComboBox中。

4个回答

339
使用ComboStyle属性:
comboBox.DropDownStyle = ComboBoxStyle.DropDownList;

41
这也可以在设计师的属性窗口中设置。 - Jeffrey
4
最近的版本中,您可以使用combo.Properties.TextEditStyle = DisableTextEditor来禁用组合框的文本编辑功能。 - Keysharpener

23

这是我使用的另一种方法,因为将DropDownStyle更改为DropDownList使其看起来3D,并且有时它只是很丑。

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

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

4
您可以在设计器中更改其外观,使用 FlatStyle :) - StinkyCat
3
@StinkyCat 这并不会改变弹出列表的外观,只会改变表单中的控件。 - Logarr
你需要处理右键菜单,其中包括“粘贴”选项。我现在还不知道怎么做。 - Sinatr
3
好的,要移除“粘贴”选项,您需要创建一个空的虚拟右键菜单,并将其分配给组合框。 - Sinatr

13
你可以在属性中更改DropDownStyle为DropDownList。这将不会显示文本框用于过滤。

DropDownStyle Property
(由FUSION CHA0S提供的屏幕截图。)


0

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

下面的代码处理删除和退格键,并禁用控制键的组合(例如 ctr + C 或 ctr + X)。 在表单加载中,使用以下行禁用组合框上的右键单击控件以避免通过鼠标单击剪切/粘贴操作。
 Private Sub CmbxInType_KeyDown(sender As Object, e As KeyEventArgs) Handles CmbxInType.KeyDown
    如果 e.KeyCode = Keys.Delete 或 e.KeyCode = Keys.Back Then 
        e.SuppressKeyPress = True
    End If

    如果不是 (e.Control AndAlso e.KeyCode = Keys.C) Then
        e.SuppressKeyPress = True
    End If
End Sub

CmbxInType.ContextMenu = new ContextMenu()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接