Как определить, какой элемент управления имеет фокус, MS Access VBA - PullRequest
2 голосов
/ 18 августа 2010

Вопрос говорит сам за себя.

У меня есть список, чей источник строк изменяется программно. Если элемент управления имеет фокус, тогда мне нужно использовать me.txtSearch.text при построении источника строк, в противном случае мне нужно использовать me.txtSearch.value.

Как определить, какой элемент управления имеет фокус?

Ответы [ 3 ]

4 голосов
/ 18 августа 2010
 Screen.ActiveControl

- элемент управления с фокусом

1 голос
/ 19 августа 2010

Я понимаю ваш вопрос, но вы, кажется, спрашиваете меня не так. Я думаю, что если вы изменяете источник строк на основе значения, введенного в текстовое поле, вы делаете это из AfterUpdate of Me! TxtSearch, и в этом случае элемент управления имеет фокус, а .Text и .Value идентичны. Только в событии OnChange .Text и Value могут отличаться. Вы также можете найти полезными OldValue и NewValue, хотя они работают только со связанными элементами управления.

Конечно, это применимо только к текстовым полям - поля со списком различаются в том смысле, что свойство .Value является связанным элементом управления, а свойство .Text является первым отображаемым столбцом (т. Е. Значения, которые вы выбираете в списке те, на которых работает автозаполнение). Вам не нужно использовать свойство .Text, чтобы получить это значение. Вместо этого вы можете использовать Me! CmbSearch.Column (1) (при условии, что Column (0) является связанным столбцом и имеет нулевую ширину, то есть скрытую).

Итак, в общем, я не понимаю, почему вам нужно различать .Value и .Text, потому что они будут одинаковыми во всех событиях, кроме OnChange. Исключением является случай, когда элемент управления является комбинированным, и в этом случае вам вообще не нужно использовать .Text, но используйте .Column (1).

Если я угадаю правильно, вы собираете критерии для предложения WHERE поля со списком RowSource и хотите написать код для этого из любого текстового поля, которое вы используете для сбора критериев. В этом случае достаточно значения .Value элементов управления (его даже не нужно указывать, так как это свойство по умолчанию для всех связанных элементов управления Access). Не существует ситуации, в которой .Text будет отличаться от .Value, в котором вы будете писать свой RowSource.

Конечно, я могу ошибаться в отношении любого количества предположений о том, что вы на самом деле пытаетесь сделать, но, поскольку вы этого не объяснили, я вынужден догадываться, поскольку сам вопрос действительно не дает смысл и в значительной степени не относится к этому вопросу. То есть использование свойства .Text бесполезно, поэтому не нужно беспокоиться о том, какой элемент управления находится в фокусе.

0 голосов
/ 18 августа 2010

Я бы сделал это глупо, потому что я никогда не видел такого API для доступа.Просто возьмите Form.Controls и пролистайте их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...