![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 09.06.2014
Сообщений: 2
|
![]()
Добрый день,
Топчусь с простым вроде бы делом. Есть форма с большим числом полей. Почти в каждом проверяется условие заполненности по выходу из ComboBox типа - Код:
Однако ни Код:
не завершаются нормально. Вернее если я нахожусь на комбобоксе где нет обработчика по Exit все хорошо. А если ксть то обязательно выплюнет MsgBox, а потом закроется. Экспериментировал с Application.EnableEvents = False не помогает. Что посоветуете? Как универсально отключить обработку во всех ComboBox при нажатии Отмены? ведь пользователь может отменить ввод на любом этапе, находясь в фокусе на любом элементе. Попытка передать фокус, а затем выгрузить форму также не проходит поскольку сначала обрабатывается событие Exit ComboBox. Спасибо. Последний раз редактировалось Stilet; 22.12.2014 в 18:36. |
![]() |
![]() |
![]() |
#2 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]() Цитата:
Чтобы получить фокус надо обработать OnExit. Другими словами чтобы отменить обработчик, надо чтобы он отработал. Так что фокус с отменой обработчика не пройдет. Цитата:
Делать проверку полей один раз в одном месте при нажатии на кнопку сохранить (точнее ПЕРЕД вызовом процедуры СОХРАНИТЬ). И по результатам проверок: -либо сохранять и закрывать; -либо отказаться от закрытия и переводить фокус на неверно заполненное поле.
программа — запись алгоритма на языке понятном транслятору
|
||
![]() |
![]() |
![]() |
#3 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
задайте в модуле формы переменную ВыходПоЛюбому
при инициализации формы присвойте ВыходПоЛюбому = False при нажатии на Cancel присвойте ВыходПоЛюбому = True Me.Hide в каждой из процедур проверки при выходе Private Sub ComboBox_sex_Exit(ByVal Cancel As MSForms.ReturnBoolean) пишите первой строкой if ВыходПоЛюбому then Exit Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#4 |
Новичок
Джуниор
Регистрация: 09.06.2014
Сообщений: 2
|
![]()
Не работает.
Сделал так - Option Explicit Private isCancel As Boolean Private Sub UserForm_Initialize() isCancel = False Private Sub ComboBox_sex_Exit(ByVal Cancel As MSForms.ReturnBoolean) If isCancel Then Unload Me Exit Sub Else ComboBox_sex.BackColor = vbWhite If ComboBox_sex.Value = "" Then MsgBox "Пол должен быть заполнен!" ComboBox_sex.BackColor = vbYellow Exit Sub: Cancel = True End If End If End Sub Public Sub CommandButton_Cancel_Click() isCancel = True End Sub При нахождении фокуса на комбобоксе ComboBox_sex по нажатию на Cancel возникает сообщение, цвет меняется на желтый и лишь по второму щелчку по Cancel форма закрывается. Перенос Unload Me в процедуру обработки Cancel ничего не меняет. |
![]() |
![]() |
![]() |
#5 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
При нахождении фокуса на комбобоксе ComboBox_sex
Вы переносите курсор на кнопку Cancel и жмете сначала возникает событие ComboBox_sex потерял фокус (выход из элемента управления) и срабатывает стандартная процедура ComboBox_sex_Exit а когда нажали Cancel (в предыдущем варианте там было Me.Hide, сейчас не вижу) метод Hide формы посылает команду закрыться всех контролам, у каждого их них срабатывает метод Exit, вот второй раз ComboBox_sex_Exit срабатывает уже при isCancel = True все логично читайте матчасть
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#6 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
Вы сначала пишете процедуру, чтобы контрол нельзя было покинуть, оставив там некорректные данные, а потом паритесь как при выходе из контрола не выполнять эту проверку.
Вы уж определитесь, что Вам нужно, напишите логично код и все тут же начнет работать...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
QT - цикл обработки событий. | Базиля | Помощь студентам | 6 | 25.10.2013 16:54 |
Как перехватить закрытие Windows-приложения без формы? | Tolias | C# (си шарп) | 9 | 27.01.2012 05:14 |
Автозапуск без перехвата событий | Вождь | Microsoft Office Word | 3 | 14.02.2011 06:02 |
Модели обработки событий Java-приложений | java_java_java | Общие вопросы по Java, Java SE, Kotlin | 1 | 10.07.2009 12:00 |
Инициализировать класс, например, для обработки событий с OLE | CaptainNemo | Microsoft Office Excel | 1 | 15.06.2009 06:21 |