如何禁用 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 组合框中手动输入