VB.NET:如何防止ComboBox中的用户输入

时间:2010-05-05 13:08:54

标签: .net vb.net combobox

如何阻止用户在ComboBox中输入,以便用户只能选择定义列表中的一个项目?

12 个答案:

答案 0 :(得分:110)

将组合框的 DropDownStyle 属性设置为DropDownList。这将仅允许选择列表中的项目,并且不允许任何自由格式的用户输入。

答案 1 :(得分:3)

使用KeyPressEventArgs,

Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress
    e.Handled = True
End Sub

答案 2 :(得分:2)

看到一个用户敲击一个超越她的决定的控件是一个悲伤的景象。将控件的Enabled属性设置为False。如果你不喜欢它,那么改变它的Items属性,这样只能选择一个项目。

答案 3 :(得分:2)

Make Combobox Readonly。在这种情况下,用户无法输入他/她的文本或不更改数据。

步骤进行:

  1. 选择你的组合框。
  2. 转到其属性框并选择DropdownStyle并将其值更改为DropdownList。

答案 4 :(得分:0)

将ReadOnly属性设置为true。

或者,如果您希望组合框显示并显示“可用”值列表,您可以处理ValueChanged事件并将其强制恢复为不可变值。

答案 5 :(得分:0)

这是最简单的方法,但它适用于我的ComboBox1名称

解决3个基本步骤:

第1步。

在表单的开头声明一个变量,该变量将保存ComboBox的原始文本值。例如:

     Dim xCurrentTextValue as string

第2步。

创建事件combobox1键 并为xCurrentTextValue变量赋值组合框的当前文本 如果按下任何不同于“ENTER”的键,组合框文本值将保留原始文本值

示例:

Private Sub ComboBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles ComboBox1.KeyDown

    xCurrentTextValue = ComboBox1.Text

    If e.KeyCode <> Keys.Enter Then
        Me.ComboBox1.Text = xCmbItem
    End If

End Sub

第3步。

验证组合文本的更改时间 如果len(xcurrenttextvalue)&gt; 0或者不是什么,然后combobox1获取xcurrenttextvalue变量值

Private Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) Handles ComboBox1.TextChanged
    If Len(xCurrentTextValue) > 0 Then
        Me.ComboBox1.Text = xCurrentTextValue

    End If
End Sub

=============================================== =========== 就是这样,

最初我只尝试过第2步,但是当你按下DEL键和向下箭头键时出现问题,由于某些原因它没有验证keydown事件,除非我显示任何消息框


!抱歉,这是对第2步的更正,我忘了将变量xCmbItem更改为xCurrentTextValue,xCmbItem将其用于个人用途

这是正确的代码

xCurrentTextValue = ComboBox1.Text

If e.KeyCode <> Keys.Enter Then
    Me.ComboBox1.Text = xCurrentTextValue
End If

答案 6 :(得分:0)

----在表单级别声明cbx veriable ---

Dim cbx as string

Private Sub comboBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboBox1.Enter
    cbx = Me.comboBox1.Text
End Sub

Private Sub comboBox1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboBox1.Leave
    Me.comboBox1.Text = cbx
End Sub

答案 7 :(得分:0)

我更正了格式 - 谢谢

----表单级别cbx的声明可靠---     dim cbx as string

Private Sub comboBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboBox1.Enter 
    cbx = Me.comboBox1.Text End Sub

Private Sub comboBox1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboBox1.Leave 
    Me.comboBox1.Text = cbx End Sub

答案 8 :(得分:0)

即使问题是marked answered,我也想add some points解决。

将组合框的 DropDownStyle 属性设置为DropDownList肯定可以。

如果下拉列表较长,那么用户将不得不将其滚动到所需的项目,因为他无法访问键盘。

 Private Sub cbostate_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles cbostate.Validating
    If cbostate.SelectedValue Is Nothing AndAlso cbostate.Text <> String.Empty Then
        e.Cancel = True
        MsgBox("Invalid State")
    End If
End Sub

我是这样做的。我想限制用户输入“随机值”而不是“状态”,但保持用户应该能够键入和搜索状态。

validating event发生在控件丢失focus时。因此,如果用户在wrong value中输入combobox,它将not allow user在表单上做任何事情,也许甚至不允许从组合框中更改焦点

答案 9 :(得分:-1)

Private Sub ComboBox4_KeyPress(sender As Object, e As KeyPressEventArgs) Handles ComboBox4.KeyPress
    e.keyChar = string.empty
End Sub

答案 10 :(得分:-1)

我认为这是针对此类问题的正确且最简单的代码

Private Sub CourseName_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles CourseName.KeyPress
    e.Handled = True

End Sub

答案 11 :(得分:-1)

在组合框的'DropDownStyle'属性中使用'DropDownList'无效,因为它会更改组合框的外观。我正在使用Visual Studio 2019社区版。

使用'e.Handled = True'也不起作用,因为它仍然允许用户输入。对于组合框的“启用”属性使用'False'也不起作用,因为它使用户无法使用组合框。

上面提出的所有“解决方案”都是完全垃圾。真正有效的是以下代码,它将用户输入限制为某些键,例如向上/向下(用于在组合框中浏览所有可用选项的列表),同时禁止所有其他键输入:-

Private Sub ComboBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles 
  ComboBox1.KeyDown
    REM The following code is executed whenever the user has pressed
    REM a key.  Added on Wednesday 1st January 2020.

    REM Determine what key the user has pressed.  Added on Wednesday
    REM 1st January 2020.
    Select Case e.KeyCode
        Case Keys.Down, Keys.Up
            REM This section is for whenever the user has pressed either
            REM the arrow down key or arrow up key.  Added on Wednesday
            REM 1st January 2020.

        Case Else
            REM This section is for whenever the user has pressed any
            REM other key.  Added on Wednesday 1st January 2020.

            REM Cancelling the key that the user has pressed.  Added on
            REM Wednesday 1st January 2020.
            e.SuppressKeyPress = True

    End Select

End Sub