#ms-access #vba
#ms-access #vba
Вопрос:
Я думаю, что я смотрю непосредственно на ошибку Access 2003. Вот что я сделал (я думаю):
- Я разрабатываю непрерывную форму (т. Е. несколько записей на странице).
- У меня есть несвязанное текстовое поле на заднем плане раздела сведений. В разделе «Свойства данных» я Включил = Нет и Заблокировал = Да. (Другими словами, я не хочу, чтобы пользователь выбирал его. Я хочу это только для цвета фона)
- Это текстовое поле также имеет некоторое условное форматирование для изменения цвета фона для этой строки. (например, если мы некоторое время не разговаривали с этим клиентом, фон для этой записи красный)
- Если я выберу запись, в которой активно условное форматирование (т. Е. Фон красный), я действительно смогу щелкнуть по этому текстовому полю. Конечно, я мало что могу сделать, но этого не должно произойти и, безусловно, это сбило бы с толку конечных пользователей.
Кто-нибудь еще видел это? Каково ваше решение?
Ответ №1:
Enabled
это свойство, которым можно управлять с помощью условного форматирования. По умолчанию при добавлении нового условия Enabled
свойству присваивается значение True. Если вы не хотите, чтобы ваш элемент управления был включен, вы должны явно установить Enabled = False в правиле условного форматирования.
Свойство переключается с помощью кнопки в правом нижнем углу диалогового окна условного форматирования. Это легко пропустить (я все время забываю об этом).
Лично я считаю, что свойство должно быть трехсторонним: True, False или Inherit (с Inherit по умолчанию). К сожалению, Access вынуждает вас быть явным при добавлении правил условного форматирования и указывать, должно ли правило включать или отключать элемент управления.
Комментарии:
1. Благодаря вам я сегодня кое-что узнал! Теперь это очевидно, но я всегда думал, что эта кнопка предназначена для углубленных границ, и проигнорировал ее.
Ответ №2:
Вот мой обходной путь (я ждал, не предложит ли кто-нибудь еще что-нибудь получше. По-видимому, нет.)
- В моем текстовом поле с условным форматированием добавьте процедуру события для GotFocus. Введите этот код:
Me.Txt_FocusHere.SetFocus
. - Создайте второе несвязанное текстовое поле где-нибудь в форме. Уменьшите его, пока оно не станет толщиной всего в 1 строку. Вызовите его
Txt_FocusHere
.
Поэтому всякий раз, когда пользователь нажимает на цветной фон, фокус сразу же переносится на это фиктивное текстовое поле, которое не может хранить какие-либо данные и настолько мало, что пользователь не видит мигающий курсор.
Комментарии:
1. Вы выполнили «отправить обратно»? И рассматривали ли вы возможность установки фокуса на
Screen.PreviousControl
вместо создания элемента управления без какой-либо иной цели, кроме получения фокуса? Если вы беспокоитесь, что каким-то образом предыдущий элемент управления с фокусом будет недоступен, вы могли бы вместо этого сделать что-то вроде настройкиMe.Section(0).Controls("SomeOtherControl").SetFocus
.2. Интересно, я не знал, что существует PreviousControl . Но, к счастью, проблема решена благодаря mwolfe02.
Ответ №3:
Я успешно использовал метод на следующей странице: http://www.mvps.org/access/forms/frm0047.htm — «Изменение цвета фона текущей записи в непрерывной форме»
Комментарии:
1. Спасибо, я видел это раньше. Вероятно, это работает, но также выглядит излишне сложным для такой подробной задачи.