在ComboBox中取消选择文本

时间:2014-03-18 20:55:37

标签: wpf vb.net combobox attached-properties

我的ComboBox IsEditable设置为True,因此我可以在TextBox中输入ComboBox。现在,我希望DropDownList打开,所以我为它创建了一个Attached Property

Public Shared Function GetShowDropDown(obj As DependencyObject) As Boolean
    Return obj.GetValue(IsDigitOnlyProperty)
End Function

Public Shared Sub SetShowDropDown(obj As DependencyObject, value As Boolean)
    obj.SetValue(IsDigitOnlyProperty, value)
End Sub

Public Shared ReadOnly ShowDropDownProperty As DependencyProperty = DependencyProperty.RegisterAttached("ShowDropDown", GetType(Boolean), GetType(ControlBehaviour), New UIPropertyMetadata(False, AddressOf OnShowDropDown))

Private Shared Sub OnShowDropDown(sender As Object, e As DependencyPropertyChangedEventArgs)
    Dim comboBox As ComboBox = sender
    Dim showDropDown As Boolean = e.NewValue

    If showDropDown Then
        AddHandler comboBox.PreviewKeyUp, AddressOf DoShowDropDown
    Else
        RemoveHandler comboBox.PreviewKeyUp, AddressOf DoShowDropDown
    End If
End Sub

Private Shared Sub DoShowDropDown(sender As Object, e As KeyEventArgs)
    Dim comboBox As ComboBox = sender
    If comboBox.Text.Length > 0 Then
        comboBox.IsDropDownOpen = True
    Else
        comboBox.IsDropDownOpen = False
    End If
End Sub

每当我输入ComboBox时,DropDownList会打开,但有1个缺陷。让我解释一下:

  • 列表中有几个项目(字符串),其中一个是“测试”。
  • 如果我在TextBox的{​​{1}}中输入“T”,则会在“T”后面添加“est”以显示“测试”。
  • 现在“{1”}中显示“测试”并且已选中。因此,当我想输入“e”时,“Test”被删除,只有“e”出现在ComboBox中(如果选择了某些内容,当你输入时会出现正常行为。

我不希望发生最后一颗子弹,如果我输入TextBox,则可能没有选择任何内容,因此我可以继续键入“测试”。这是我按下字母“T”的截图。我希望这能解释我的问题。

Screen when "T" is pressed

我认为应该发生的事情是我必须以某种方式取消选择测试或设置它以便选择从TextBox中的第2个字符开始,但我不知道如何做到这一点。


要添加其他内容,当我按Enter键时,我希望它隐藏DropDown。

2 个答案:

答案 0 :(得分:0)

设置组合框的此属性

IsTextSearchEnabled="True"

答案 1 :(得分:0)

说明

我们将使用SelectedIndex属性执行此操作。我们将选择-1指数。据了解,不能将任何项目作为-1,因此不会选择任何项目。无论你怎么说,这些项目的编号或列表都从0开始。

但是,假设你有5个项目,你不能给它6号,它会显示运行时错误。

为了你的额外帮助,你不希望一切都应该消失,只是应该来,对吗?为此,您可以将combobox的所有文本保存在变量或textbox中,然后将其与之后输入的文本一起带回combobox

我们将在计时器事件中通过将间隔设置为1毫秒来执行第二个要求,以便它可以更频繁地记录更改。您可以在任何您想要的事件中执行此操作(TextChanged等。)

代码和示例

combobox.SelectedIndex = -1

对于不替换现有文本的文本:

Private Sub Form1_Load () Handles Mybase.Load
       Timer1.Interval = 1
End Sub

Private Sub Timer1_Tick () Handles Timer1.Tick
       Textbox1.Text = Combobox.Text
End Sub

并将现在输入的文本指定为另一个变量,我们将编写以下代码:

Combobox.Text = Textbox1.Text & a 'assuming 'a' is the text you entered later.

我希望它能帮助你并完美地工作!