Vb

Тема в разделе "Visual Basic", создана пользователем aNOOBis, 29 май 2007.

Статус темы:
Закрыта.
  1. aNOOBis

    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
    тоже самое происходит и с лэйблами, в чем дело? где ошибка?
     
  2. Pasha

    Pasha Гость

    Для: aNOOBis
    Как именно не реагирует? Текст не меняется при клике на cmd1?
     
  3. aNOOBis

    aNOOBis Гость

    <!--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 слово пуск, но оно ни как выводится(
     
  4. Pasha

    Pasha Гость

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

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

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

    aNOOBis Гость

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

    Код (Text):
    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 прогресс бар)

    Здесь все работает, а
    здесь нет
    Код (Text):
    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
    Вроде все тоже кроме того, что вместо увеличения прогресс бара идет вывод сообщения. В чем разница?
     
  6. Pasha

    Pasha Гость

    Разница в том, что в первой программе есть таймер, который вызывает folow если wow=1.
    Код (Text):
    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...
     
  7. aNOOBis

    aNOOBis Гость

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

    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.

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

    aNOOBis Гость

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

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

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

    Pasha Гость

    Потому что она генерирует новое число на основе предыдущего. При запуске программы начальное значение одно и то же.
    Вызывай Randomize() где-нибудь при загрузке формы, он ининциализирует генератор текущим временем.
     
  11. aNOOBis

    aNOOBis Гость

    Еще раз спасибо
     
Статус темы:
Закрыта.

Поделиться этой страницей