Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Vb
Форум программистов > Системное программирование > Visual Basic
aNOOBis
(Переменные объявил)

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
тоже самое происходит и с лэйблами, в чем дело? где ошибка?
Pasha
Для: aNOOBis
Как именно не реагирует? Текст не меняется при клике на cmd1?
aNOOBis
Цитата(Pasha @ 29:05:2007, 14:21 )
Как именно не реагирует? Текст не меняется при клике на cmd1?
*

Да, поидее cmdklick = 1 кнопку нажали, то при нажатии на cmd1 дожна среагировать pusk и вывести на text1 слово пуск, но оно ни как выводится(
Pasha
Тут что-то не то с пониманием
"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

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

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


Вроде все тоже кроме того, что вместо увеличения прогресс бара идет вывод сообщения. В чем разница?
Pasha
Разница в том, что в первой программе есть таймер, который вызывает 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...
aNOOBis
Т.Е. на значение wow = 1 может сробатывать только таймер? А применять текстам без таймера нельзя?
Pasha
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.

ЗЫ фиговый из меня учитель.
aNOOBis
Все теперь понял) Огромное спасибо.

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

Хех!) У меня еще один вопрос вот команда Int(Rnd * 20) +10
По замыслу ее значения должно быть разным, но при каждом запуске программы произвольного числа она выдает одно и тоже. Почему?
Pasha
Потому что она генерирует новое число на основе предыдущего. При запуске программы начальное значение одно и то же.
Вызывай Randomize() где-нибудь при загрузке формы, он ининциализирует генератор текущим временем.
aNOOBis
Еще раз спасибо
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.