ПОНЯТНО О Visual Basic NET (том 3)

       

Индикатор процесса (ProgressBar)


Индикатор процесса ProgressBar из VS изображен сверху на Рис. 18.6. А в нижней части рисунка изображен один из двух видов аналогичного индикатора из Visual Basic 6.0.

Рис. 18.6

Смысл индикатора процесса. Вы наверняка видели такие индикаторы при инсталляции программ. Зачем они нужны? Пусть ваша программа запускает длительный процесс, во время которого на экране ничего не происходит (например, моделирует столкновение галактик или считывает информацию из 400 файлов). У пользователя при длительном наблюдении за неподвижным экраном может возникнуть тревожное ощущение, что программа зависла. Чтобы успокоить пользователя, вы можете, начиная процесс, выдать на экран текст «Я занята. Подождите минутку», который пропадет, когда дело сделано. Но опять же, пока дело делается, этот текст так долго и неподвижно красуется посреди экрана, что в душу опять закрадываются подозрения. Гораздо лучше создать ProgressBar и организовать дело так, чтобы темная полоса после считывания информации из каждого файла продвигалась на 1/400 часть длины ProgressBar. Поскольку компьютер работает быстро и за секунду может считать, скажем, десяток небольших файлов, полоса будет десять раз в секунду немножко продвигаться и у пользователя создастся впечатление, что полоса плавно ползет направо. А раз движение есть, значит компьютер не завис! К тому же, глядя на индикатор, можно примерно представлять, какая часть работы уже выполнена.

Задача. Пусть компьютер 400 раз подряд выполняет процедуру Процесс, которая каждый раз исполняется довольно долго (скажем, полсекунды) и делает что-то полезное. Получается, что в течение 200 секунд на экране ничего не будет происходить. Нужно для спокойствия пользователя организовать работу индикатора процесса.

Ваши действия: Поместите на форму ProgressBar. Задайте ему такие свойства:

  • Minimum                             -              0
  • Maximum                            -              400
  • Step                                      -              1
  • Вот программа, иллюстрирующая работу индикатора процесса:


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Dim k As Long

            For k = 1 To 400                                                 'всего 400 процессов



                Процесс()

                ProgressBar1.PerformStep()                    'Делаем очередной шаг на полосе

            Next

    End Sub

    Sub Процесс()

            Dim i As Long

            For i = 1 To 1000000 : Next                         'Процесс (пустой цикл)

    End Sub

    Пояснения: Щелчком по кнопке мы запускаем 400 процессов. В качестве иллюстрации процесса я выбрал пустой цикл. После завершения каждого процесса выполняется строка

                ProgressBar1.PerformStep()                    'Делаем очередной шаг на полосе

    по которой срабатывает метод PerformStep объекта ProgressBar1. Дело этого метода – просто продвинуть полосу индикатора на величину свойства Step.

    Старый индикатор из Visual Basic 6.0. Мне он нравится больше индикатора из VS, так как его полоса может иметь гладкий, а не прерывистый вид. Как до него добраться? Поместите на Toolbox, как это рассказано в 4.2.3, элемент управления Microsoft ProgressBar Control, version 6.0. Это он и есть. Оттуда поместите его на форму. Он получит какое-то имя, скажем, AxProgressBar2. Гладкий или прерывистый вид его полосы определяется свойством Scrolling. Индикатор может располагаться и вертикально (свойство Orientation).

    Вы можете управлять положением его полосы, задавая свойство Value.

    Задайте ему такие свойства:

    • Min                       -              0


    • Max                      -              10000


    • Вот программа, иллюстрирующая его работу:

      Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

              Dim a As Long

              For a = 1 To 10000

                  AxProgressBar2.Value

      = a

              Next

          End Sub

      Во время выполнения этой процедуры полоса движется. Если движение слишком быстрое или слишком медленное, измените максимальное значение индикатора и переменной цикла.


      Содержание раздела