2015-10-23 2 views
1

Краткая форма: в MS Access VBA (2010), я хотел бы знать, какой элемент управления собирается получить фокус во время события LostFocus.Найдите следующий элемент управления в событии LostFocus?

Длинная форма: В форме у меня есть подчиненная форма, содержащая список фруктов, цифр и комментариев. В форме, я показываю, что подчиненной в списке для ранее известного набора фруктов:

Fruit Count Comment 
Apples 
Apples 
Apples 
Oranges 
Bananas 
Bananas 

Пользователь вводит счетчики для каждого плода:

Fruit Count Comment 
Apples 4 
Apples 3 
Apples 2 
Oranges 5 
Bananas 2 
Bananas -1   (= rotten) 

Теперь мне нужно вычислить средние значения, как это:

Fruit Count Comment 
Apples 4 
Apples 3 
Apples 2 
Apples 3  Average 
Oranges 5 
Bananas 2 
Bananas -1 
Bananas -1  Average 

У меня уже есть Sub, который делает это, но слишком медленно запускать его после каждого входа. Это также путает пользователя, что неожиданно появляются некоторые средние значения среди ее входов. Поэтому я хочу запустить его только после того, как пользователь завершит ввод значений.

Естественное место ИМО для выполнения этого среднего расчета будет событием LostFocus контроля счетчика, но только если фокус изменится на что-то еще, чем на другое управление счетчиком. Как я могу это сделать (screen.ActiveControl не помогает, потому что во время LostFocus это еще старый элемент управления)?

ответ

0

Если вы создаете переменную для хранения последнего контроля вы были в. dim LastUsedControl as string

На вашем LostFocus случае для подсчета поля LastUsedControl = Me.ActiveControl.Name

Использование OnEnter событие ваших других полей, которые вы могли бы сделать

If LastUsedControl = "txtCount" then 
    Call FindAverageCount 
End If 

Затем создайте метод, который вычисляет и обновляет ваши записи со средними значениями public sub FindAverageCount(), а затем вызовите в событии OnEnter только в том случае, если вы пришли из редактирования поля count.

+1

Спасибо за ваш ответ. Это связано с написанием обработчиков OnEnter для всех остальных элементов управления. Я могу сделать то же самое с GetFocus на всех других элементах управления и LostFocus в подчиненной форме. Я искал способ сделать это, не написав 8 дополнительных обработчиков событий, но кажется, что это невозможно – Batox

+0

Неужели невозможно сделать то, что описывает @batox? Укажите имя нового элемента управления/следующего активного элемента управления в событии LostFocus (скоро будет) PreviousControl? В принятом ответе не содержится окончательного определения того, возможно ли это. –

Смежные вопросы