使用ComboBox的自动完成功能,同时将值限制为列表中的值?

Sch*_*uli 17 .net validation combobox winforms

在WinForms 2.0中,ComboBox具有自动完成功能,该功能显示自定义下拉列表,其中仅包含以输入文本开头的值.

但是,如果我想将有效值限制为仅显示在ComboBox项目列表中的值,我可以通过设置DropDownStyleto DropDownList来阻止用户输入值.

但是,现在我无法使用需要用户输入的自动完成功能.

是否有其他方法可以限制输入到列表,同时仍然允许使用自动完成功能?请注意,我已经看到了一些针对此的自定义解决方案,但我真的很喜欢匹配的自动完成项目在下拉列表中显示的方式,并且即使原始列表可能不是这样排序的.

编辑:我已经考虑过验证输入的值,即测试用户输入是否在TextChanged事件中有效,甚至是使用Validating事件.那么问题是预期的行为是什么?我是否清除它们的值(空值也无效),还是使用默认值?最接近的匹配值?

Ps我可以在这个问题上添加任何其他标签吗?

Ste*_*enC 5

这个解决方案对我有用:

Private Sub myComboBox_Validating(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles myComboBox.Validating
    If Not myComboBox.Items.Contains(myComboBox.Text) Then
        MsgBox("Please select a value from the list", MsgBoxStyle.Exclamation, "Value not available")
        e.Cancel = True
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)


Aar*_*ith 0

我这样做的方法是,当它们离开框时,根据可能值列表检查该值,并且不要让它们留下无效值。我不知道当您发现他们输入了无效值时您会如何处理,但这就是我过去所做的。