如何将组合框设置为只读或禁止用户在组合框中写入,只能选择给定的项目?

55

我在设置组合框属性时遇到了问题,只允许用户从给定的选项中选择值,但我无法在组合框中写入。

如何在C#中实现这个功能?


这个问题之前已经被问过了。请参见这里: https://dev59.com/03VD5IYBdhLWcg3wHnoX - Peter
6个回答

134

只需将DropDownStyle更改为DropDownList。 或者如果你希望它完全只读,可以设置 Enabled=false; 如果你不喜欢这样的外观,有时我会使用两个控件,一个是只读文本框,另一个是组合框,然后隐藏组合框并显示文本框,如果它应该完全只读,则相反。


2
但请注意:readonly != disabled。 - H H
1
@Henk:是的,这就是我说“如果你不喜欢那个样子”的原因,因为通常人们发现禁用控件而不是将其设置为只读是主要问题。 - Hans Olsson
1
谢谢伙计,这很简单,但如果你不知道这个,它对你来说就是一个谜。谢谢,它有效。 - Badr
4
很遗憾,组合框无法同时显示默认文本和下拉列表样式。 - nurettin

21

我认为你想要更改名为"DropDownStyle"的设置为"DropDownList"。


15
在keypress事件处理程序中:
e.Handled = true;

1
最佳解决方案!谢谢 - MrJack Mcfreder
1
这并不妨碍在组合框中删除所选文本。 - ajeh
非常好的解决方案,但容易受到“删除”按钮和右键单击组合框 -> 选择删除选项的攻击。 - Tahirhan

9
将DropDownStyle设置为DropDownList
stateComboBox.DropDownStyle = ComboBoxStyle.DropDownList;

7

试试这个:

    private void comboBox1_KeyDown(object sender, KeyEventArgs e)
    {
        // comboBox1 is readonly
        e.SuppressKeyPress = true;
    }

唯一的解决方案是允许初始文本,但仍不允许用户更改 ComboBox 中的文本。非常感谢! - MarkusAnd

4
解决方案是将DropDownStyle属性更改为DropDownList。这将有所帮助。

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