Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Индексированные элементы управления



 Другие рефераты
Изучение программ MS Office Имитационное моделирование компьютерных сетей Инсталляция Windows XP. Конфигурирование оболочки Windows XP, оптимизация работы Интегрированная среда Microsoft

Индексированные элементы управления
                (автор: Есин  И. В.  email: tofriend@list.ru)



                                  О чём ...

      Рано  или  поздно  серьёзно  осваивающий  программирование,  изучающий
первую систему программирования  столкнётся  с  необходимостью  использовать
массивы.  Каждый элемент массива определяется своим индексом,  которое  есть
неотрицательное целое  число.   Каждый  массив  определяется  своим  именем,
которое не  противоречит  правилу  построения  имён  для  переменных.   Ещё,
говоря  о  массивах,  следует  подчеркнуть,   что   все   элементы   массива
обязательно однородны.  В контексте сказанного  в  VB  различают,  например,
массивы элементов управления.  Хотя индексированные  элементы  управления  с
общим именем в соответствие с аналогией "обычных" массивов не  всегда  можно
назвать массивом элементов управления, в статье они всё же будут  называться
"массивы элементов управления", что довольно распространено.

       В  статье  на  основании   двух   примеров   рассматриваются   многие
преимущества  использования  массивов  элементов  управления  (в  надлежащих
случаях),  показывается  каким  образом  можно  создавать  массивы   и   как
обращаться  к  их  элементам.    Статья   не   претендует   дать   полнейшее
истолкование  массивов  элементов  управления.   Знание  "обычных"  массивов
необязательно.


                                Пример первый
                                     или
                       "с претензией называться игрой"

       Рассмотрим  задачу,  которая  ясно   выделяет   многие   преимущества
использования массива объектов.  Выводы позволят сделать два  подхода  к  её
решению ...
      На форме уже имеется картинка PictureBox и девять равновеликих  кнопок
CommandButton.   Имена  объектов  не  изменены,  а   в  картинку   загружена
фотография.
                                    [pic]

Причём автор идеи написал уже такой программный код:

Private Sub Form_Load()
  ' надпись кнопки - произвольная цифра
  Command1.Caption = Int(9 * Rnd)
  Command2.Caption = Int(9 * Rnd)
  Command3.Caption = Int(9 * Rnd)
  Command4.Caption = Int(9 * Rnd)
  Command5.Caption = Int(9 * Rnd)
  Command6.Caption = Int(9 * Rnd)
  Command7.Caption = Int(9 * Rnd)
  Command8.Caption = Int(9 * Rnd)
  Command9.Caption = Int(9 * Rnd)

End Sub

Из которого следует, что после открытия приложения надписи  кнопок  -  цифры
полученные псевдослучайно.
       Необходимо  открыть  картинку  убирая  кнопку  за  кнопкой.    Причём
начинать надо с кнопки у которой цифра наибольшая.  Затем выбирается  кнопка
у которой тоже цифра наибольшая, но уже среди оставшихся  и  т.  д..   Таким
образом, последняя кнопка  - кнопка с наименьшей цифрой.

                                  Долго ...

Если писать обработчик щелчка по кнопке Command1, то может получится так:

Private Sub Command1_Click()

  If Command1.Caption < Command2.Caption Then End
  If Command1.Caption < Command3.Caption Then End
  If Command1.Caption < Command4.Caption Then End
  If Command1.Caption < Command5.Caption Then End
  If Command1.Caption < Command6.Caption Then End
  If Command1.Caption < Command7.Caption Then End
  If Command1.Caption < Command8.Caption Then End
  If Command1.Caption < Command9.Caption Then End
  ' если цифра кнопки больше или равна каждой другой, то выбрали нужную!
    Command1.Visible = False
  ' надпись минус один - чтобы уже "невидимая" не мешала выбору нужной
среди видимых!
    Command1.Caption = -1

End Sub

Для "второй" кнопки:

Private Sub Command2_Click()

  If Command2.Caption < Command1.Caption Then End
  If Command2.Caption < Command3.Caption Then End
  If Command2.Caption < Command4.Caption Then End
  If Command2.Caption < Command5.Caption Then End
  If Command2.Caption < Command6.Caption Then End
  If Command2.Caption < Command7.Caption Then End
  If Command2.Caption < Command8.Caption Then End
  If Command2.Caption < Command9.Caption Then End

    Command2.Visible = False
    Command2.Caption = -1

End Sub

Для следующих программные коды аналогичны.   Однако,  для  проверки  приведу
обработчик для "последней" кнопки:

Private Sub Command9_Click()

  If Command9.Caption < Command1.Caption Then End
  If Command9.Caption < Command2.Caption Then End
  If Command9.Caption < Command3.Caption Then End
  If Command9.Caption < Command4.Caption Then End
  If Command9.Caption < Command5.Caption Then End
  If Command9.Caption < Command6.Caption Then End
  If Command9.Caption < Command7.Caption Then End
  If Command9.Caption < Command8.Caption Then End

    Command9.Visible = False
    Command9.Caption = -1

End Sub

Получилось довольно громоздко.  Тем не менее, программный код  удовлетворяет
поставленной задаче.

                                   Быстро!

      Чтобы реализовать другой подход необходимо изменить свойство Index у
всех кнопок следующим образом ...
      Измените свойство Index у кнопки Command1 на  0.   У  кнопки  Command2
имя  на  Command1,  причём  вам  надо   будет   положительно   ответить   на
предлагаемый вопрос среды  разработки.   Выполните  последнее  указание  для
всех других кнопок.

                                    [pic]

У меня заняло меньше времени выполнить то, что я вам описал выше.
       Такие  приготовления  нам  были   просто   необходимы,   потому   что
программный код будет совсем другим!  Вот его листинг:

Private Sub Form_Load()

  For i = 0 To 8

    Command1(i).Caption = Int(9 * Rnd)

  Next i

End Sub

Private Sub Command1_Click(Index As Integer)

  For i = 0 To 8

    If Command1(Index).Caption < Command1(i).Caption Then End

  Next i

    Command1(Index).Visible = False
    Command1(Index).Caption = -1

End Sub

      Если вы предположите, что объём проекта первого  подхода  больше,  чем
при  другом  подходе,  то  будете  совершенно  правы  (8,71  Кб  и  4,25  Кб
соответственно).
      Однако, более  подробные  объяснения  как  создавать  и  обращаться  к
массивам элементов управления изложим на следующем примере и после него.


                                Пример второй
                                     или
                        "спички детям - не игрушка!"

      Представьте, перед вами выложили два коробка, один из которых  пустой,
а другой наполнен спичками.  Далее вам  предлагают  выбрать  любой  из  них.
Если вы выберите из двух пустой коробок, то вы выиграли, в противном  случае
- к двум имеющимся добавят  ещё  один  спичечный  коробок  и  перемешают  их
тайным для вас образом.  После выбора  пустого  коробка  среди  трёх,  перед
вами окажется два, иначе - добавят  ещё  один  и  таким  же  методом.   Игра
оканчивается не  в вашу пользу, если число коробков превысит девяти.

      Представим данную программу  в  виде  приложения!   Для  разнообразия,
используем инструмент Label  (метка).   Разместим  выбранный  инструмент  на
форме ближе к левому краю.  Ширина брошенной метки  должна  быть  в  десять-
одиннадцать раз  меньше  ширины  максимизированного  окна.   Свойство  Index
равно единице.
Свойство BackColor  должно  выделять  всю  метку.   Свойство  Caption  лучше
изменить.
                                    [pic]

      Ещё моя задумка не заставит вас утруждаться  над  созданием  остальных
девяти  меток,  поскольку  они  будут   мгновенно   созданы   при   открытии
приложения:

Private Sub Form_Load()

    For i = 2 To 10

      Load Label1(i) ' добавляем ещё девять меток

    Next i

End Sub

Из данной  процедуры  читаем:  "чтобы  добавить  объект  в  массив  объектов
необходимо воспользоваться оператором Load".  Правильно.   Скажем  ещё,  что
"через пробел после указания оператора  напишем  имя  существующего  массива
объектов, а в скобках выражение,  задающее  индекс  добавляемого  элемента".
Здесь хороша догадка про "выражение".  Но и  это  ещё  не  всё.   Бывают  ли
такие случаи когда  нельзя  (не  получится)  добавлять  (добавить)  элемент?
Проверить правильность возможных догадок можете в следующем разделе статьи.

Теперь попробуйте изменить число 10 в данной процедуре на 32768.   Запустите
программу и посмотрите, что получается …

Прежде рассматривать следующие процедуры, в которых узнаете, как  обращаться
к элементам массива объекта объявим переменную:

Private skolko As Integer ' объявляем переменную которая будет сообщать
сколько коробок на столе

А вот и те самые процедуры:

Private Sub Form_Initialize()

  Me.WindowState = 2 ' развернём окошко

  Label1(2).Left = Label1(1).Left + Label1(1).Width + 60 ' вначале выложили
две
  Label1(2).Visible = True

    skolko = 2

End Sub

Private Sub Label1_Click(Index As Integer)

  If Fix(skolko * Rnd) + 1 = Index Then
  ' если "угадали" - одна убирается
    Label1(skolko).Visible = False

      skolko = skolko - 1

  Else
  ' если не угадали - выставляется ещё одна
    Label1(skolko + 1).Left = Label1(skolko).Left + Label1(skolko).Width +
60
    Label1(skolko + 1).Visible = True

      skolko = skolko + 1

  End If

  Select Case skolko ' проверка на выигрыш и проигрыш

    Case 1
      MsgBox "Вы выиграли!": End

    Case 10
      MsgBox "Вы проиграли.": End

  End Select

End Sub

Отсюда делаем вывод:  "обращаются  к  элементам  массива  объекта  следующим
образом ...    Пишут  имя  массива  объектов,  затем  в  скобках  выражение,
указывающее индекс элемента и уж после  через  точку  то  свойство,  которое
хотят либо изменить, либо прочитать".  Умозаключение приятно как,  по  сути,
так и по форме.  Однако, возможна ли ошибка пр
12
скачать работу


 Другие рефераты
Понятие и виды договоров в Римском частном праве
Влияние СМИ на политику
Каменные оборонительные сооружения Новгородской земли доогнестрельного периода
История Византии От рождения до средних веков


 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ