Vb

  • Автор темы aNOOBis
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

aNOOBis

Гость
#1
(Переменные объявил)

Private Sub cmd1_Click()
If cmdklick = 1 Then
cmdklick = 0
Else
cmdklick = 1
End If
End Sub

Public Sub pusk ()
If cmdklick = 1 Then
Text1.Text = "Пуск"
End If
End Sub

Текстовое поле никак не реагирует на процедуру pusk
тоже самое происходит и с лэйблами, в чем дело? где ошибка?
 
P

Pasha

Гость
#2
Для: aNOOBis
Как именно не реагирует? Текст не меняется при клике на cmd1?
 
A

aNOOBis

Гость
#3
<!--QuoteBegin-Pasha+29:05:2007, 14:21 -->
<span class="vbquote">(Pasha @ 29:05:2007, 14:21 )</span><!--QuoteEBegin-->Как именно не реагирует? Текст не меняется при клике на cmd1?
[snapback]67479" rel="nofollow" target="_blank[/snapback]​
[/quote]
Да, поидее cmdklick = 1 кнопку нажали, то при нажатии на cmd1 дожна среагировать pusk и вывести на text1 слово пуск, но оно ни как выводится(
 
P

Pasha

Гость
#4
Тут что-то не то с пониманием
"If cmdklick = 1 Then" не ждет пока cmdklick станет равным 1.
Т.е. фразу "код внутри If условие Then ... End If выполняется когда условие истинно" надо читать как "код внутри If условие Then ... End If выполняется если условие истинно".

Вобщем, напиши
Код:
Private Sub cmd1_Click()
Pusk()
End Sub

Public Sub pusk ()
Text1.Text = "Пуск"
End Sub
и будет тебе счастье.
 
A

aNOOBis

Гость
#5
Дело не в самом выводе текста. Я просто хочу понять почему допустим работает такая программа

Код:
Private Sub cmdstart_Click()
If wow = 1 Then
wow = 0
cmdstart.Caption = "Старт"
Else
wow = 1
cmdstart.Caption = "Стоп"
End If
End Sub

Private Sub Timer1_Timer()

If wow = 1 Then
folow
End If
End Sub

Public Sub folow()
Static yahoo
yahoo = yahoo + 1
PB1 = yahoo
End Sub
(где PB1 прогресс бар)

Здесь все работает, а
здесь нет
Код:
Private Sub cmd1_Click()
If cmdklick = 1 Then
cmdklick = 0
Else
cmdklick = 1
End If
End Sub

Public Sub pusk ()
If cmdklick = 1 Then
Text1.Text = "Пуск"
End If
End Sub
Вроде все тоже кроме того, что вместо увеличения прогресс бара идет вывод сообщения. В чем разница?
 
P

Pasha

Гость
#6
Разница в том, что в первой программе есть таймер, который вызывает folow если wow=1.
Код:
Private Sub Timer1_Timer()
If wow = 1 Then
folow
End If
End Sub
Т.е. нажали кнопку - wow выставился в 1
...прошло время...
сработал таймер, выполняется Timer1_Timer
wow=1? значит вызываем folow...
...прошло время...
сработал таймер, выполняется Timer1_Timer
wow=1? значит вызываем folow...
...прошло время...
сработал таймер, выполняется Timer1_Timer
wow=1? значит вызываем folow...
 
A

aNOOBis

Гость
#7
Т.Е. на значение wow = 1 может сробатывать только таймер? А применять текстам без таймера нельзя?
 
P

Pasha

Гость
#8
Timer1_Timer() - это обработчик события OnTimer элемента управления Timer. И он тоже не "срабатывает на wow = 1". Он вызывается системой через одинаковые промежутки времени, а не "висит" на строчке с If.
Представь что программа выполняется построчно. Раз в секунду система передает управление Private Sub Timer1_Timer().
Выполняется строчка If wow = 1 Then. Если wow не равно 1, управление переходит сразу на End If.
Если wow равно 1, то выполняется следующая строчка после Then - "folow".

В начале wow = 0, и при каждом вызове Timer1_Timer строчка между then и end if пропускается.

Потом ты нажимаешь кнопку. wow меняется на 1.
Когда в следующий раз система вызовет Timer1_Timer, то строчка между Then и End If выполнится.

А во втором случае текст меняется в pusk. Т.е. чтобы он поменялся, надо чтобы в другом месте программы было написано "pusk", например в cmd1_Click.

ЗЫ фиговый из меня учитель.
 
A

aNOOBis

Гость
#9
Все теперь понял) Огромное спасибо.

ЗЫ эт из меня плохой ученик)

Хех!) У меня еще один вопрос вот команда Int(Rnd * 20) +10
По замыслу ее значения должно быть разным, но при каждом запуске программы произвольного числа она выдает одно и тоже. Почему?
 
P

Pasha

Гость
#10
Потому что она генерирует новое число на основе предыдущего. При запуске программы начальное значение одно и то же.
Вызывай Randomize() где-нибудь при загрузке формы, он ининциализирует генератор текущим временем.
 
Статус
Закрыто для дальнейших ответов.