Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Листание назад Добавлено: 08.05.07 22:39  

Автор вопроса:  Skywalker | Web-сайт: iSkywalker.ru | ICQ: 300-70-6пятьЪ 
Требуется выполнить в программе листание назад, но что-то не получсется, старею чтоли))

Имееются куча процедур типа Sub1, Sub2 и т.д.
кнопка при нажатии на которую должна вызываца предыдущаю процедура (в процедурах рисуется картинка на форме)

Что сделал я и что не работает:

Public gCount As Integer
Public gBoo As Boolean

Public Sub Start()
gCount = 0
gBoo = False
Timer1.Enabled = True
trrrr
End Sub

Private Sub trrrr()
If gCount = 0 Then sub1
If gCount = 1 Then sub2
.......................
End Sub

Private Sub Command2_Click()
gBoo = True
End Sub

Private Sub sub1()
gCount = 1
..................
trrrr
End Sub

Private Sub sub2()
gCount = 2
..................
trrrr
End Sub

..................

Private Sub Timer1_Timer()
If gBoo = True Then
gBoo = False
Select Case gCount
Case 2:
CLEARDEVICE
sub1
Case 3:
CLEARDEVICE
sub2
..........................
End Select
End If
End Sub


Листает лишь один раз назад (самый первый), дальше сколько не тыкай ничего не происходит. Подскажите как нужно?

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #1
Добавлено: 09.05.07 17:18
yxaxa
не пойму, какой смысл в trrrr?

у тебя саб1 и саб2 и так выполняются и из них вызывается trrrr, в которой они вызываются еще раз (?)

Ответить

Номер ответа: 2
Автор ответа:
 Silver Ferrum



ICQ: 422640045 

Вопросов: 12
Ответов: 144
 Профиль | | #2 Добавлено: 09.05.07 17:21
..у тебя там появляетСо безконечный цикл. Когда ты вызываешь из трррр например саб1, то саб1 вызывает трррр, и так всё время
реши это как-то

Ответить

Номер ответа: 3
Автор ответа:
 Black Berill



Вопросов: 17
Ответов: 151
 Профиль | | #3 Добавлено: 09.05.07 19:07
А что за Sub Start? Может, Form_Load()?

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 09.05.07 20:50
А что за Sub Start? Может, Form_Load()?
Слышал про такие страшные приложения, у которых нет формы? :))

2 yxaxa
Ужосс то какой, почему бы не объединить все процедуры Sub1, Sub2... в одну и передавать ей просто аргумент? Или создать прослойку - создать процедуру, которая принимает аргумент нужного действия, потом select caseом вызывает нужную процедуру.

Ответить

Номер ответа: 5
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #5
Добавлено: 09.05.07 20:54
trrr не знаю зачем, просто сначала были другие варианты которые тожа не работали, мучал-мучал, отбалды писал, стараясь заставить работать. ну а процедура старт вызываеца после нажатия кнопки, типа начать:)
ну а бесконечный цикл... там ведь переменная гкоунт все время меняется и вызывается следующая процедура каждый раз, а не таже самая.

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

выполняется саб1
выполняется саб2
жмем кнопку назад
выполняется саб1
выполняется саб2
выполняется саб3
жмем назад
выполняется саб2
жмем назад
выполняется саб1
выполняется саб2
....

Ответить

Номер ответа: 6
Автор ответа:
 Silver Ferrum



ICQ: 422640045 

Вопросов: 12
Ответов: 144
 Профиль | | #6 Добавлено: 09.05.07 20:57
жёсткая прога, надо будет подумать

Ответить

Номер ответа: 7
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #7
Добавлено: 09.05.07 21:51
HACKER, Все равно не могу сообразить напирмер


Public Sub Start(ByVal j As Integer)
Select Case j
Case 1
код
gCount = 2

Case 2
код
gCount = 3

Case 3
код
gCount=4

и т.д.

End Select
End Sub

Private Sub Command2_Click()
gCount = gCount - 1
CLEARDEVICE
Start (gCount)
End Sub


ето все ясно, но не пойму откуда мне теперь вызывать, чтобы по окончанию одного куска начинался другой.

если сделать так

Case 1
код
gCount = 2
Start(gCount)

и везде так


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

Ответить

Номер ответа: 8
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #8
Добавлено: 09.05.07 22:02
если сделать так

 
Case 1
код
gCount = 2
Start(gCount)

и везде так


то получица офигенная рекурсия и ктому же некоторые куски кода будут выполнятся нескольк о раз. Вот немогу себе представить как сдеать(((
зачем так????

Private Sub Command2_Click()
gCount = gCount - 1
CLEARDEVICE
Start (gCount)
End Sub
и это зачем?

If gCount = 0 Then sub1
If gCount = 1 Then sub2

Ответить

Номер ответа: 9
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #9
Добавлено: 09.05.07 22:03
If gCount = 0 Then sub1
If gCount = 1 Then sub2
ты должен проверять в коде кнопки возврата, понимаешь?

Ответить

Номер ответа: 10
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #10
Добавлено: 09.05.07 22:09
нет,и зачем ты цитируешь

If gCount = 0 Then sub1
If gCount = 1 Then sub2


если мы уже решили что то неправильно, и я написал др кусок в котором пытаюсь реализовать совет HACKERa

Ответить

Номер ответа: 11
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #11
Добавлено: 09.05.07 22:29
Объясни мне, где HACKER тебе такого посоветовал? :)

Ответить

Номер ответа: 12
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #12
Добавлено: 09.05.07 22:34
HACKER просто посоветовал тебе объединить все эти действия в одну процедуоу и Select Case присваивать значения

если мы уже решили что то неправильно, и я написал др кусок в котором пытаюсь реализовать совет HACKERa
кто сказал, что это неправильно, стоит заметить, что опять - логичнее с if будет перейти на Select Case, и таким образом у тебя должно быть две функции с обработкой Select Case, понял?

Ответить

Номер ответа: 13
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #13
Добавлено: 09.05.07 22:38
Ужосс то какой, почему бы не объединить все процедуры Sub1, Sub2... в одну и передавать ей просто аргумент?


вот где

-------------

вобщем вот что получилось

Private Sub Form_Load()
gCount = 1
End Sub

Private Sub Command1_Click()' Кнопка старт
Command1.Visible = False
1:
CLEARDEVICE
Do While Start(gCount) = gCount + 1
gCount = gCount + 1
Loop
GoTo 1
End Sub

Private Sub Command2_Click()' Кнопка назад
gCount = gCount - 1
End Sub

Public Function Start(ByVal j As Integer) As Integer
Select Case j
Case 1
Код
Start = 2

Case 2
Код
Start = 3

и т.д.

End Select
End Function


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

Ответить

Номер ответа: 14
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #14
Добавлено: 10.05.07 00:08
может быть можно реализовать как то многопоточностью, типа 1 поток делает куски кода, а второй его контролирует?

Ответить

Номер ответа: 15
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #15 Добавлено: 10.05.07 01:55
нестоит с потоками :) врядли ты представляешь как приходиться извращаться чтобы они работали в вб :) Хотя если умеешь писать на чём то кроме вб, хотябы PowerBasic то можно подумать в сторону длл, которой передаются параметры, а она уже создает поток, синхронизируясь с основной программой...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам