Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADODC / 8 сообщений из 8, страница 1 из 1
28.12.2004, 13:09:18
    #32847619
oGre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODC
Есть форма, на форме ADO DataControl, к нему прикручены контролы, у всех контролов CausesValidation = True. Все отлично, пока юзер ходит с контрола на контрол, меняет там что-то, Validate происходит, ADODC в курсе происходящего... Но если после изменения данных контрола юзер сразу жмет на закрытие формы, то Validation не происходит, ADODC в блаженном неведении, а нужно знать, менял он там хоть что-то или нет. Отдельную кнопку для закрытия формы делать нежелательно, как быть?
...
Рейтинг: 0 / 0
28.12.2004, 13:28:53
    #32847681
Serg_Bh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODC
Используй Form_QueryUnload event. Проанализируй параметр unloadmode, если он равен vbFormControlMenu, значит юзер закрыл форму через нажатие "крестика" (или Alt+F4). Оттуда же можно принудительно дернуть Validate event для ADODC
...
Рейтинг: 0 / 0
28.12.2004, 13:44:10
    #32847723
Serg_Bh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODC
Пардон, фигню сказал про ADODC Validate :) Можно создать флажки (True/False) для каждого контрола. Событие Change контрола устанавливает соотв. флаг в True, Validate сбрасывает в False. В обработчике QueryUnload проверить все флаги и для тех, которые True дернуть Validate соответствующего контрола.
...
Рейтинг: 0 / 0
28.12.2004, 14:27:45
    #32847850
oGre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODC
Блин, тада проще кнопку нарисовать. А по-другому никак не выйдет?
...
Рейтинг: 0 / 0
28.12.2004, 14:33:04
    #32847871
oGre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODC
Погоди-ка, ведь фокус при нажатии на закрыть остается на контроле, через screen.activecontrol как "дернуть" его Validate? Глупый вопрос, сорри.
...
Рейтинг: 0 / 0
28.12.2004, 14:50:29
    #32847928
oGre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODC
...если неизвестно заранее, какой именно контрол...
...
Рейтинг: 0 / 0
28.12.2004, 18:36:13
    #32848571
Serg_Bh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODC
Событие Change срабатывает каждый раз, когда вводится/стирается символ в текстбоксе. Если юзер ничего не менял, то и валидировать ничего не надо? Небольшое уточнение - для List и ComboBox нужно использовать событие Click. Если не хочешь плодить флаги - у контролов есть неиспользуемое свойство Tag - клади туда, например, "True" если данные были изменены и "False", если не изменены. Ну а чтобы дернуть обработчик события надо просто Call его :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
private sub Контрол1_Change()
    Контрол1.Tag="True"
end sub
'...
private sub КонтролN_Change()
    КонтролN.Tag="True"
end sub

private sub Контрол1_Validate(KeepFocus As Boolean)
    'выполняем действия по валидации
    Контрол1.Tag="False"
end sub
'...
private sub КонтролN_Validate(KeepFocus As Boolean)
    'выполняем действия по валидации
    КонтролN.Tag="False"
end sub

private sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)
    if Контрол1.Tag="True" then Call Контрол1_Validate
    '...
    if КонтролN.Tag="True" then Call Контрол1_Validate
end sub
...
Рейтинг: 0 / 0
28.12.2004, 18:38:44
    #32848577
Serg_Bh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODC
в предпоследней строчке Call КонтролN_Validate
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADODC / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]