VBA, MS Access MS Access в примерах

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

     Изменяет цвет фона поля в форме на время пребывания в нем фокуса - функциональной нагрузки -НОЛЬ - за то мигающий курсор, глазами (возможно усталыми) искать не надо. В данном случае с белого цвета (фон по умолчанию)  - на желтый

Для подсвечиваемых полей необходимо установить свойства событий:
Получение фокуса:  =FRMControlFocusInOut([Name];-1)
Потеря фокуса:       =FRMControlFocusInOut([Name];0)
   
Примечание:
Работаем через передачу имени формы, на случай если их "висит" больше одной, иначе можно было бы работать так:

    Screen.ActiveForm.ActiveControl.BackColor = ColorGotFocus



Функция:

Public Function FRMControlFocusInOut(strFormName As String, blnGotFocus As Boolean, Optional blnInSubForm As Boolean)
' Подсветка активного поля в форме
' Highlighting Active Control
' -------------------------------------------------------------------------------------------------/
' Usage:
'   OnGotFocus Control Property  : =FRMControlFocusInOut([Name];-1)
'   OnLostFocus Control Property : =FRMControlFocusInOut([Name];0)
' Usage in subform:
'   OnGotFocus Control Property  : =FRMControlFocusInOut([Name];-1;-1)
'   OnLostFocus Control Property : =FRMControlFocusInOut([Name];0;-1)
' -------------------------------------------------------------------------------------------------/
Const clGotFocusBorderColor = 1643706 ' Red
Const clGotFocusBackColor = 12975359  ' Light Yellow
Const clNormalBorderColor = 10921638  ' Background 1, Darker 35%
Const clNormalBackColor = 16777215    ' Background 1
Dim objCtrl As Control
' -------------------------------------------------------------------------------------------------/
On Error GoTo FRMControlFocusInOut_Err

    If blnInSubForm Then
        Set objCtrl = Screen.ActiveControl
    Else
        Set objCtrl = Forms(strFormName).ActiveControl
    End If
    
    With objCtrl
        Select Case blnGotFocus
            Case True    ' On GotFocus
                .BorderColor = clGotFocusBorderColor
                .BackColor = clGotFocusBackColor
            Case False   ' On LostFocus
                .BorderColor = clNormalBorderColor
                .BackColor = clNormalBackColor
        End Select
    End With
    
    Set objCtrl = Nothing
    Exit Function
' -------------------------------------------------------------------------------------------------/
FRMControlFocusInOut_Err:
    Err.Clear
End Function



Результат может выглядеть так:

Picture


Можно добиться примерно того же результата и без кода - просто задайте цвет фона полей - а затем сделайте их прозрачными - при получении фокуса поле будет подсвечиваться ранее заданным цветом. Будет только один недостаток - не активные поля имеют тот же цвет что и форма.




Скачать

MSA-2007 и выше ( 72 kB) Пример


Назад ToTop
L.E. 03.07.2023
Рейтинг@Mail.ru