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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        • 2018-11-08
        • 1970-01-01
        相关资源
        最近更新 更多