Страницы

четверг, 4 июня 2015 г.

Выделение текстового поля на форме Access

Этот метод улучшает пользовательский интерфейс приложений на Access. Текстовое поле в стандартной форме ничем, кроме мигающего курсора, не выделяется. Порой бывает сложно сразу определить, где находится текущее поле ввода. При получении фокуса будем подсвечивать поле (свойство BackColor) и менять оформление для него (SpecialEffect), при возврате фокуса свойства поля будут меняться на стандартные.
Вот такое текстовое поле без обработки:


Создадим несколько функций и отдельный модуль для них.
В редакторе Visual Basic (Alt+F11) создаем новый модуль: Insert=>Module. Назовем его modSpecEffects. Объявим константы в разделе определения, затем добавим две функции. Таким образом, модуль содержит следующий текст:
Option Compare Database
Option Explicit

Private Const cWhite = 16777215
Private Const cGray = -2147483633
Private Const cIndent = 2
Private Const cFlat = 0

Public Function SpecEfEnter()
    On Error GoTo HandleErr
    'рельефное выделение поля
    Screen.ActiveControl.SpecialEffect = cIndent
    'цвет поля становится белым
    Screen.ActiveControl.BackColor = cWhite
   
ExitHere:
        Exit Function
HandleErr:
    MsgBox Err & ": " & Err.Description
    Resume ExitHere
End Function

Public Function SpecEfExit()
    On Error GoTo HandleErr
    'рельефное выделение поля убираем
    Screen.ActiveControl.SpecialEffect = cFlat
    'цвет поля становится стандартным
    Screen.ActiveControl.BackColor = cGray
   
ExitHere:
        Exit Function
HandleErr:
    MsgBox Err & ":" & Err.Description
    Resume ExitHere
End Function

Перейдем в форму, выделим текстовые поля, которые нужно будет изменить (выделение нескольких полей по порядку производится с зажатой клавишей Shift, выделение полей поодиночке – с клавишей Ctrl), откроем их свойства и запишем обработчики для событий «Получение фокуса» (OnGotFocus) и «Потеря фокуса (OnLostFocus). Это будут наши ранее созданные функции SpecEfEnter() и SpecEfExit() соответственно. Ставим знак «=», затем начинаем писать названия функций. Их названия появятся в списке подсказки.
Итог:


Кроме того, для этих элементов устанавливаем цвет фона 12632256 или выбрать из списка «Цвет формы».
Для формы создадим обработчик события «Открытие» (Open):
Private Sub Form_Open(Cancel As Integer)
    Me.SetFocus
End Sub
Если не прописать установку фокуса, то при открытии формы выйдет ошибка, поскольку активный элемент будет не определен, а обработчик уже сработает.
После запуска формы получаем:


Можно менять не только цвет фона и оформление, но и другие свойства, например, цвет текста,
Поскольку мы создали отдельный модуль, то эти функции не нужно прописывать в модулях других форм, достаточно написать их названия в обработчиках элементов управления (как на третьем рисунке).