Ошибка повторно включает текстовое поле, если в нем есть Cond. Форматирование?

#ms-access #vba

#ms-access #vba

Вопрос:

Я думаю, что я смотрю непосредственно на ошибку Access 2003. Вот что я сделал (я думаю):

  1. Я разрабатываю непрерывную форму (т. Е. несколько записей на странице).
  2. У меня есть несвязанное текстовое поле на заднем плане раздела сведений. В разделе «Свойства данных» я Включил = Нет и Заблокировал = Да. (Другими словами, я не хочу, чтобы пользователь выбирал его. Я хочу это только для цвета фона)
  3. Это текстовое поле также имеет некоторое условное форматирование для изменения цвета фона для этой строки. (например, если мы некоторое время не разговаривали с этим клиентом, фон для этой записи красный)
  4. Если я выберу запись, в которой активно условное форматирование (т. Е. Фон красный), я действительно смогу щелкнуть по этому текстовому полю. Конечно, я мало что могу сделать, но этого не должно произойти и, безусловно, это сбило бы с толку конечных пользователей.

Кто-нибудь еще видел это? Каково ваше решение?

Ответ №1:

Enabled это свойство, которым можно управлять с помощью условного форматирования. По умолчанию при добавлении нового условия Enabled свойству присваивается значение True. Если вы не хотите, чтобы ваш элемент управления был включен, вы должны явно установить Enabled = False в правиле условного форматирования.

Свойство переключается с помощью кнопки в правом нижнем углу диалогового окна условного форматирования. Это легко пропустить (я все время забываю об этом).

Лично я считаю, что свойство должно быть трехсторонним: True, False или Inherit (с Inherit по умолчанию). К сожалению, Access вынуждает вас быть явным при добавлении правил условного форматирования и указывать, должно ли правило включать или отключать элемент управления.

Комментарии:

1. Благодаря вам я сегодня кое-что узнал! Теперь это очевидно, но я всегда думал, что эта кнопка предназначена для углубленных границ, и проигнорировал ее.

Ответ №2:

Вот мой обходной путь (я ждал, не предложит ли кто-нибудь еще что-нибудь получше. По-видимому, нет.)

  1. В моем текстовом поле с условным форматированием добавьте процедуру события для GotFocus. Введите этот код: Me.Txt_FocusHere.SetFocus .
  2. Создайте второе несвязанное текстовое поле где-нибудь в форме. Уменьшите его, пока оно не станет толщиной всего в 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. Спасибо, я видел это раньше. Вероятно, это работает, но также выглядит излишне сложным для такой подробной задачи.