2015-11-13 3 views
1

В MS-Access 2010 у меня есть табличная форма с текстовым полем, которое я хочу использовать в качестве фильтра для представленных данных. Когда пользователь вводит значение в этом поле, в своем обработчике событий я устанавливаю свойства фильтра фильтра и фильтра. Все хорошо, за исключением того, что один пользовательский ввод (клик или клавиша, с которым она покидает управление фильтром) теряется - то есть она должна дважды щелкнуть или щелкнуть дважды, чтобы покинуть поле. Она считает это самым раздражающим.Установка фильтра теряет следующий пользовательский ввод

Я экспериментировал со всеми событиями в текстовом поле - либо он не работает, либо ест один пользовательский ввод.

См. Прикрепленный файл example database - после ввода значения фильтра в поле фильтра (например, символ «c»), щелкните по нижнему полю (какой-либо другой элемент управления). В этом клике фильтр правильно применяется, но курсор остается в окне фильтра. Он перемещается только после второго нажатия на другой элемент управления.

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

ответ

1

Я видел это поведение раньше, но не могу вспомнить, нашел ли я хорошее решение (возможно, нет, или я бы помнил).

Порядочный обходной путь, чтобы отделить две вещи:

  1. Переместить фокус на другой элемент, вызывая Control_AfterUpdate
  2. Применить фильтр

с помощью процедуры Form_Timer событий.

Me.TimerInterval = 1 активирует таймер, а Me.TimerInterval = 0 дезактивирует его.

Private Sub SetFilter() 
    Me.Filter = "tText >= '" + Nz(Me.FilterMin) + "'" 
    Me.FilterOn = True 
End Sub 

Private Sub FilterMin_AfterUpdate() 
    ' Separate control navigation and filtering by using the Form.OnTimer event 
    Me.TimerInterval = 1 
End Sub 

Private Sub Form_Timer() 
    ' Deactivate timer (important!) 
    Me.TimerInterval = 0 
    Call SetFilter 
End Sub 
+0

Я думаю, что это все. Спасибо за вашу идею :) – Batox