Vb

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

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

    aNOOBis Гость

    Репутация:
    0
    (Переменные объявил)

    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 Гость

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

    aNOOBis Гость

    Репутация:
    0
    <!--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 Гость

    Репутация:
    0
    Тут что-то не то с пониманием
    "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 Гость

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

    Код (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 Гость

    Репутация:
    0
    Разница в том, что в первой программе есть таймер, который вызывает 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 Гость

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

    Pasha Гость

    Репутация:
    0
    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 Гость

    Репутация:
    0
    Все теперь понял) Огромное спасибо.

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

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

    Pasha Гость

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

    aNOOBis Гость

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

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