如何阻止用户在ComboBox中输入,以便用户只能选择定义列表中的一个项目?
答案 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。在这种情况下,用户无法输入他/她的文本或不更改数据。
步骤进行:
答案 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