Глюк после компиляции

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

Глюк после компиляции

Сообщение Matew » 03.10.2004 (Вс) 15:40

Имеется вот такой код:
Код: Выделить всё
Private Sub sliRazmer_Change()
Dim intPress As Integer
If flRazmer = 0 then
        intPress = MsgBox("Точно изменить?", vbQuestion + vbYesNo, "Вопрос")
        If intPress = vbNo Then
            Exit Sub
        Else
                sliRazmer.SetFocus
                flRazmer=1
        End If
End If
If flRazmer=1 then а=sliRazmer.value
End Sub

Такая же процедура на Скрол. Так вот, после компиляции программа при попытки изменить положение слайдера выдает ошибку №5. Она происходит в строке sliRazmer.SetFocus. Мож мне это как нить переделать?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.10.2004 (Вс) 16:33

Попробуй в Form_Load первой строкой вставить
Код: Выделить всё
Show
Изображение

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 03.10.2004 (Вс) 16:38

А почему это поможет??
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 03.10.2004 (Вс) 16:48

Помогло на половину)) Ошибку не выдает, но МСЖбокс два раза выкидывает. Че делать?
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.10.2004 (Вс) 16:57

Matew писал(а):А почему это поможет??

Потому что SetFocus обламывается при невидимой форме.
Изображение

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 03.10.2004 (Вс) 16:59

Прежде всего - стандартный код, при использовании SetFocus таков:

Код: Выделить всё
If Object.Visible Then Object.SetFocus


А что это, кстати, за a такое:

Код: Выделить всё
а=sliRazmer.value


Просто интересно.

И использование одного и того же кода в Change и Scroll не оправдано.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 03.10.2004 (Вс) 17:11

Форма и слайдер видимы наверняка.
а-это размер полигона в другой процедуре
а почему неьзя использовать одинаковые процедуры в скроле и чендже?
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 03.10.2004 (Вс) 17:17

Можно, но не нужно. Ведь при Scroll происходит Change. Поэтому-то два раза и появляется сообщение.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 03.10.2004 (Вс) 17:24

А без компиляции тока один раз.......
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 03.10.2004 (Вс) 19:06

gaidar писал(а):Можно, но не нужно. Ведь при Scroll происходит Change. Поэтому-то два раза и появляется сообщение.


Хм... Позволю себе заметить, что при Scroll Change уже не происходит. Лично у меня оба события происходят абсолютно независимо...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.10.2004 (Вс) 19:38

Тогда я позволю заметить, что Change происходит сразу вслед за последним Scroll :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 03.10.2004 (Вс) 19:44

Так. Скажем, ставлю на событие scroll оператор msgbox "scroll", а на change - msgbox "change".
Если они происходят один за другим, то должны выползти 2 msgbox'а в непонятно каком порядке.
Но в том то всё и дело, что выползает только один :)
Кликаешь на контрол - Change, перетаскиваешь движок - Scroll.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.10.2004 (Вс) 19:45

А ты вместо msgbox сделай debug.? ...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 03.10.2004 (Вс) 19:51

Debug.Print?

Тот же результат :)

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 04.10.2004 (Пн) 4:36

Я попробовал вот так:
Код: Выделить всё
Private Sub sliRazmer_Scroll()
On Error GoTo qq


If flRazmer = 0  Then
Dim intPress As Integer
        intPress = MsgBox("Точно изменить?", vbQuestion + vbYesNo, "Ïîäòâåðæäåíèå")
        If intPress = vbNo Then
            Exit Sub
        Else
            flRazmer = 1
            If sliRazmer.Visible Then sliRazmer.SetFocus
        End If
End If
qq:
If flRazmer = 1  Then a=sliRazmer.value
End Sub

Поставил Show в Form_load, убрал вообще Change. Ошибку не выдает, но сообщение всеравно два раза вывдит! Если убрать On Error GoTo qq то и ошибку выдает! Что мне делать? Мож это как-то по другому написать?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.10.2004 (Пн) 8:19

Попробуйте добавить ещё DoEvents после Show в Form_Load...

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 04.10.2004 (Пн) 8:25

DoEvents не помогло(((. Мож алгоритм поменять?
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.10.2004 (Пн) 8:28

Ошибка происходит при невидимой форме? Может, так сделать:

Do While Form1.Visible=False
DoEvents
Loop

Вместо DoEvents...

Но я точно не уверен...

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 04.10.2004 (Пн) 8:29

Ошибка происходит при видимой форме((
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 04.10.2004 (Пн) 11:29

Я не понял, зачем вообще нужно "sliRazmer.SetFocus", ведь если вызывается событие scroll или Change, то контрол sliRazmer становится активным.
Убирай "sliRazmer.SetFocus" и обе проблемы исчезают.
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 04.10.2004 (Пн) 12:16

Без него ниче ваще не работает-сообщение два раза выскакивает(есть тока процедура скрол, ченджя нет), и нельзя сдвинуть слайдер фокус пропадает после МСЖбокса((
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 04.10.2004 (Пн) 13:24

Да! я протупил! Но ради реабилитации выкладую пример!
Токо-что сам сделал - вроде работает!
Вложения
slide.rar
Перемещение ПикчерБокса по форме с помощью Слайда, с подтверждением перемещения
(1.58 Кб) Скачиваний: 28
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 05.10.2004 (Вт) 7:41

Я выяснил в чем дело! После компиляции событие Scroll происходит два раза! Что можно сделать? Я уже пробовал поменять сам Слайдер на форме-не помогает(((
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 05.10.2004 (Вт) 8:48

Уточню, второй раз произходит когда после месаджбокса фокус переходит на ползунок слайда. это легко проверить, просто счелкнув на сам бегунок(без перетаскивания).
Попробуй так, как я показал в примере. Т.е. отслеживать скрол: если происходит перемещение слайда -то выполнять какие-то действия, а когда позиция слайда не изменилась (slide1.value = prevValue), то это значит что сработал глюк слайда и ничего приетом не делать.
А вообще подумай, может можно обойтись без слайда. Со скролбаром таких глюков не замечалось. А если я правильно понял, у тебя слайдер имеет два значения - 0 и 1, То в этом случае тебе поможет элементарный чекбокс.
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 06.10.2004 (Ср) 3:19

SHURUP, я сделал так, как ты сказал, но ничего не изменилось. После компияции все равно сообщение выскакиает дважды(((( До компиляции все работает нормально. Второй раз когда выскакивает сообщение выбор да или нет не имеет значения, результат зависит тока от первгого выбора((
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 08.10.2004 (Пт) 8:50

Все сори! се работает!
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 1

    TopList