Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Цвет фона поля
 
 автор: TimRus   (17.05.2010 в 09:16)   личное сообщение
 
 

Здравствуйте!!! Помогите пожалуйста реализовать следующюю задумку:
имеется форма с полями (полями со списками), необходимо, чтобы при получении фокуса цвет фона поля (поля со списком) изменялся, а после потери фокуса становился прежним (по умолчанию для access).
Как достигнуть такого эффекта? И как лучше реализовать вышеизложенное?

  Ответить  
 
 автор: snipe   (17.05.2010 в 09:34)   личное сообщение
 
 

там у поля есть события получение фокуса и потеря фокуса
свойство поля которое надо обрабатывать (задавать значения цвета) BackColor
про число цвета - тут не так давно Час целую программку написал - пошухайте

=============
добавлено
пример

Private Sub ПолеСоСписком36_GotFocus()
Me!ПолеСоСписком36.BackColor = RGB(255, 0, 0)' красное поле
End Sub

Private Sub ПолеСоСписком36_LostFocus()
Me!ПолеСоСписком36.BackColor = RGB(255, 255, 255) 'белое поле
End Sub

  Ответить  
 
 автор: TimRus   (17.05.2010 в 09:52)   личное сообщение
 
 

Спасибо!!! По поводу событий все понятно, а можно ли все это реализовать через функцию? Ведь придется применять данную процедуру к каждому полю...

  Ответить  
 
 автор: snipe   (17.05.2010 в 10:03)   личное сообщение
 
 

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

например так

Private Sub ПолеСоСписком36_GotFocus()
call ColorSet(Me!ПолеСоСписком36.Name,True)
End Sub

Private Sub ПолеСоСписком36_LostFocus()
call ColorSet(Me!ПолеСоСписком36.Name,False)
End Sub

Private function ColorSet (asd as string, dfg as boolean)
if dfg = True Then
Me(asd).BackColor = RGB(255, 0, 0)' красное поле
else
Me(asd).BackColor = RGB(255, 255, 255) 'белое поле
end if
end function

  Ответить  
 
 автор: TimRus   (17.05.2010 в 10:11)   личное сообщение
 
 

Спасибо за помощь!!!

  Ответить  
 
 автор: snipe   (17.05.2010 в 10:19)   личное сообщение
 
 

ну еще можно выдернуть
имя контрола на котором установлен фокус
Screen.ActiveControl.Name
потом в функции сначала обнулить все контролы (сделать фоновыми)
а потом нужный контрол покрасить в нужный цвет

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

как-то так

Private Sub ПолеСоСписком36_GotFocus()
call ColorSet()
End Sub

Private Sub ПолеСоСписком37_GotFocus()
call ColorSet()
End Sub

Private Sub ПолеСоСписком38_GotFocus()
call ColorSet()
End Sub



Private function ColorSet ()
dim asd as string
asd=Screen.ActiveControl.Name
Me!ПолеСоСписком36.BackColor = RGB(255, 255, 255)'белое поле
Me!ПолеСоСписком37.BackColor = RGB(255, 255, 255)'белое поле
Me!ПолеСоСписком38.BackColor = RGB(255, 255, 255)'белое поле
Me(asd).BackColor = RGB(255, 0, 0) 'красное поле
end function

  Ответить  
 
 автор: TimRus   (17.05.2010 в 10:39)   личное сообщение
 
 

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

  Ответить  
 
 автор: snipe   (17.05.2010 в 10:46)   личное сообщение
 
 

вставляете в модуль
только вместо Private
пишете Public
вместо Me
Пишите полное обращение к форме
forms![имя формы]

можно выдернуть имя формы на которой находится фокус
Screen.ActiveForm.Name

вот только обход контролов на форме надо через цикл сделать что бы не прописывать их все

  Ответить  
 
 автор: TimRus   (17.05.2010 в 10:48)   личное сообщение
 
 

Огромное спасибо!! Точ то доктор прописал!!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList