Как запустить событие при выборе редактируемого поля со списком?

У меня есть ComboBox, который привязан к ObservableCollection из strings. ComboBox также можно редактировать, поэтому вы можете ввести собственное значение или выбрать его из списка. Проблема, с которой я сталкиваюсь, заключается в том, что индекс SelectedItem, кажется, является индексом последнего элемента, который вы выбрали, когда вы ввели свое собственное значение в ComboBox, хотя это -1, когда у вас IsTextSearchEnabled установлено значение true.

Проблема в том, что если кто-то ввел собственное значение, а затем решил вместо этого выбрать элемент в ComboBox, который был выбран ранее, индекс не изменится, поэтому событие SelectionChange не сработает. Как я мог запустить событие в этой ситуации?


person cost    schedule 15.06.2012    source источник


Ответы (1)


Протестируйте это ... Надеюсь, это поможет:

Dim oldSEL As String = ""

'always checking while you move your mouse over the combobox (when altering selection) and using the keyboard to (alter selection)
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.MouseMove, ComboBox1.KeyPress
    Dim currentSEL As String = ComboBox1.SelectedText
    If Not (oldSEL = "" And currentSEL = oldSEL) Then
        fire()
        oldSEL = currentSEL
    End If
End Sub

Private Sub fire()
    Trace.Write("text selected changed")
End Sub

Вы должны изменить все Combobox1 по своему вкусу.

person jestrange    schedule 17.06.2012
comment
Это хорошее предложение. Я не использую это именно по нескольким причинам, но вы заставили меня задуматься о том, как я могу это сделать. Вместо этого я использую событие MouseLeave. Но спасибо! - person cost; 18.06.2012
comment
Вы можете использовать эту идею для создания лучшего кода, например, с использованием пользовательских событий и интерфейсов. Но пока это зависит от вас, потому что я не очень знаком с ними. ха-ха. - person jestrange; 19.06.2012