TextBox Validate

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

TextBox Validate

Сообщение VVitafresh » 06.08.2007 (Пн) 12:20

При переходе (клике) на следующий текстбокс выполняется код Validate для текущего:
Код: Выделить всё
Private Sub Text1_Validate(Cancel As Boolean)
    Dim i
    i = MsgBox("Test", vbYesNo, "Test")
End Sub


После этого для того, чтобы перейти на следующий контрол нужно щелкнуть не один а ДВА раза (после первого клика фокус остается в том же текстбоксе). Если MsgBox не вызывать, все работает как обычно.

Глюк или фича? И как это обойти?
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 06.08.2007 (Пн) 14:03

Хочу понять у меня глюки или это у всех так.

Если не сложно попробуйте у себя на форме положить два текстбокса Text1 и Text2 и добавить код:
Код: Выделить всё
Private Sub Text1_Validate(Cancel As Boolean)
    Dim i as Long
    i = MsgBox("Test", vbYesNo, "Test")
End Sub

Установить фокус на Text1, щелкнуть на Text2, ответить на вопрос месседжбокса (Yes или No) и снова щелкнуть на Text1

Курсор сразу переходит на Text1 или нужно щелкнуть повторно?
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 06.08.2007 (Пн) 14:20

Нужно щелкнуть повторно.
Add:
Потому что до ответа в Text2 произошел keydown, а после ответа keyup не происходит. Текстбокс остается в состоянии выделения текста.
Последний раз редактировалось Antonariy 06.08.2007 (Пн) 14:27, всего редактировалось 3 раз(а).
Лучший способ понять что-то самому — объяснить это другому.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 06.08.2007 (Пн) 14:23

Вообще-то - нафига выдавать сообщение, если все введено правильно?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 06.08.2007 (Пн) 14:41

Antonariy, есть мысли, как это можно исправить?

Andrey Fedorov, долго объяснять...

Вкратце:
В БД есть справочкик пользователей (ID, ФИО). Есть форма ввода, где нужно вводить определенные данные и среди них есть ФИО и идентификатор пользователя (нечто вроде табельного номера).

Проблема в том, что не всегда в справочнике есть актуальные данные, поэтому разрешается вводить ФИО и идентификатор вручную. Хочу сделать, чтобы при вводе ФИО, которое есть в справочнике идентификатор автоматически "подтягивался", однако если в текстбоксе уже есть другой идентификатор спрашивать у пользователя, заменить его или оставить. Для этого в Validate делается проверка и выводится вопрос. Примерно так.
Последний раз редактировалось VVitafresh 06.08.2007 (Пн) 14:47, всего редактировалось 1 раз.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 06.08.2007 (Пн) 14:47

Сделать mouse_click после ответа?
Лучший способ понять что-то самому — объяснить это другому.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 06.08.2007 (Пн) 14:59

В смысле mouse_event?
Код: Выделить всё
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, cButt, dwEI

Вроде работает. Придется так наверное.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 95

    TopList