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

Posted

技术标签:

【中文标题】如何禁用 C# 组合框中元素的编辑?【英文标题】:How to disable editing of elements in combobox for c#? 【发布时间】:2010-10-10 13:14:48 【问题描述】:

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

【问题讨论】:

【参考方案1】:

使用 ComboStyle 属性:

comboBox.DropDownStyle = ComboBoxStyle.DropDownList;

【讨论】:

这个也可以在设计器的属性窗口中设置。 最新版本可以使用combo.Properties.TextEditStyle = DisableTextEditor【参考方案2】:

这是我使用的另一种方法,因为将 DropDownSyle 更改为 DropDownList 使它看起来像 3D,有时它只是丑陋的。

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

private void ComboBox1_KeyPress(object sender, KeyPressEventArgs e)

      e.Handled = true;

【讨论】:

您可以在设计器中更改其外观,FlatStyle :) @StinkyCat 这不会改变弹出列表的外观,只会改变表单中的控件。 你必须处理右键菜单,你也可以选择Paste。我不知道现在怎么样。 好的,要删除Paste,您必须创建假的空上下文菜单并将其分配给组合框。【参考方案3】:

您可以将属性中的 DropDownStyle 更改为 DropDownList。这不会显示过滤器的文本框。

(截图由FUSION CHA0S提供。)

【讨论】:

【参考方案4】:

我试过 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()

【讨论】:

以上是关于如何禁用 C# 组合框中元素的编辑?的主要内容,如果未能解决你的问题,请参考以下文章

如何允许用户在 c# 中的 datagridview 组合框中手动输入

如何动态更改 C# 组合框或文本框中的自动完成条目?

C# - 如何防止我的组合框中的鼠标滚轮滚动?

在组合框中选择升序时如何对元素列表进行排序

C# - 如何检查用户的输入是不是存在于组合框中(使用的数据绑定项)

C# CaliburnMicro:如何根据在数据网格中选择的项目自动在组合框中显示值?