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

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

(автор:Есин  И. В.  email: tofriend@list.ru)

О чём ...

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

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

Пример первый

или

«с претензией называться игрой»

          Рассмотримзадачу, которая ясно выделяет многие преимущества использования массиваобъектов.  Выводы позволят сделать дваподхода к её решению ...

          На форме уже имеется картинка PictureBoxи девять равновеликих кнопок CommandButton.  Имена объектов не изменены, а  в картинку загружена фотография.

<img src="/cache/referats/17034/image002.jpg" v:shapes="_x0000_i1025">

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

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">Private Sub Form_Load()

<span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">  ' надпись кнопки — произвольная цифра

<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU">

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU"> 

<span Courier New";mso-bidi-font-family: «Times New Roman»">Command1.Caption = Int(9 * Rnd)

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> Command2.Caption = Int(9 * Rnd)

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> Command3.Caption = Int(9 * Rnd)

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> Command4.Caption = Int(9 * Rnd)

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> Command5.Caption = Int(9 * Rnd)

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> Command6.Caption = Int(9 * Rnd)

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> Command7.Caption = Int(9 * Rnd)

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> Command8.Caption = Int(9 * Rnd)

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> Command9.Caption = Int(9 * Rnd)

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">End Sub

<span Courier New";mso-bidi-font-family:«Times New Roman»">

Из которого следует, что послеоткрытия приложения надписи кнопок — цифры полученные псевдослучайно.

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

         

Долго ...

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

<span Courier New"; mso-bidi-font-family:«Times New Roman»">Private Sub Command1_Click()

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command1.Caption < Command2.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command1.Caption < Command3.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command1.Caption < Command4.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command1.Caption < Command5.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command1.Caption < Command6.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command1.Caption < Command7.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command1.Caption < Command8.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command1.Caption < Command9.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green"> 

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green;mso-ansi-language:RU">' еслицифра кнопки больше или равна каждой другой, то выбрали нужную!<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU">

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">   Command1.Visible = False

<span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">  ' надпись минус один — чтобы уже«невидимая» не мешала выбору нужной среди видимых!

<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU">

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">   

<span Courier New";mso-bidi-font-family: «Times New Roman»">Command1.Caption = -1

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">End Sub

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

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

<span Courier New"; mso-bidi-font-family:«Times New Roman»">Private Sub Command2_Click()

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command2.Caption < Command1.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command2.Caption < Command3.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command2.Caption < Command4.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command2.Caption < Command5.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command2.Caption < Command6.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command2.Caption < Command7.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command2.Caption < Command8.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command2.Caption < Command9.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   Command2.Visible = False

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   Command2.Caption = -1

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">End Sub

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">

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

<span Courier New"; mso-bidi-font-family:«Times New Roman»">Private Sub Command9_Click()

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command9.Caption < Command1.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command9.Caption < Command2.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command9.Caption < Command3.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command9.Caption < Command4.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command9.Caption < Command5.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command9.Caption < Command6.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command9.Caption < Command7.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Command9.Caption < Command8.Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   Command9.Visible = False

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   Command9.Caption = -1

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">End Sub

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">

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

Быстро!

          Чтобыреализовать другой подход необходимо изменить свойство Indexу всехкнопок следующим образом ...

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

<img src="/cache/referats/17034/image004.jpg" v:shapes="_x0000_i1026">

У меня заняло меньше временивыполнить то, что я вам описал выше.

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

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">Private Sub Form_Load()

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> For i = 0 To 8

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   Command1(i).Caption = Int(9 * Rnd)

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> Next i

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">End Sub

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">Private Sub Command1_Click(Index AsInteger)

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> For i = 0 To 8

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   If Command1(Index).Caption < Command1(i).Caption Then End

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> Next i

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   Command1(Index).Visible = False

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   

<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU">Command1(Index).Caption = -1

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">End Sub

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

          Однако, более подробные объяснения как создавать иобращаться к массивам элементов управления изложим на следующем примере и посленего.

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">

Пример второй

или

«спички детям — не игрушка!»

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

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

Свойство BackColorдолжно выделять всю метку.  Свойство Captionлучше изменить.

<img src="/cache/referats/17034/image006.jpg" v:shapes="_x0000_i1027">

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

<span Courier New"; mso-bidi-font-family:«Times New Roman»">Private Sub Form_Load()

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   For i = 2 To 10

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">     

<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU">Load Label1(i) ' добавляем ещёдевять меток

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">   Next i

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">End Sub

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">

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

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

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

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">Private skolko As Integer ' объявляем переменную которая будет сообщать сколькокоробок на столе

<span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">

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

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">Private SubForm_Initialize()

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">  Me.WindowState = 2

<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green">' <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">развернём<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">окошко<span Courier New";mso-bidi-font-family:«Times New Roman»; color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">  Label1(2).Left = Label1(1).Left +Label1(1).Width + 60

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green">' <span Courier New";mso-bidi-font-family:«Times New Roman»; color:green;mso-ansi-language:RU">вначале<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green"> <span Courier New";mso-bidi-font-family:«Times New Roman»; color:green;mso-ansi-language:RU">выложили<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green"> <span Courier New";mso-bidi-font-family:«Times New Roman»; color:green;mso-ansi-language:RU">две<span Courier New";mso-bidi-font-family:«Times New Roman»;color:green">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">  Label1(2).Visible = True

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black"> 

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">    skolko = 2

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">End Sub

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">Private Sub Label1_Click(IndexAs Integer)

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">  If Fix(skolko * Rnd) + 1 = Index Then

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black"> 

<span Courier New";mso-bidi-font-family:«Times New Roman»;color:green">' <span Courier New";mso-bidi-font-family:«Times New Roman»; color:green;mso-ansi-language:RU">если<span Courier New";mso-bidi-font-family:«Times New Roman»;color:green"> "<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green;mso-ansi-language:RU">угадали<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green">" — <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">одна<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">убирается<span Courier New";mso-bidi-font-family:«Times New Roman»; color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">    Label1(skolko).Visible = False

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">     

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black;mso-ansi-language:RU">skolko= skolko — 1

<span Courier New";mso-bidi-font-family: «Times New Roman»;color:black;mso-ansi-language:RU">

<span Courier New";mso-bidi-font-family: «Times New Roman»;color:black;mso-ansi-language:RU">  Else

<span Courier New";mso-bidi-font-family: «Times New Roman»;color:black;mso-ansi-language:RU"> 

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green;mso-ansi-language:RU">' еслине угадали — выставляется ещё одна

<span Courier New";mso-bidi-font-family: «Times New Roman»;color:black;mso-ansi-language:RU">   

<span Courier New";mso-bidi-font-family:«Times New Roman»;color:black">Label1(skolko+ 1).Left = Label1(skolko).Left + Label1(skolko).Width + 60

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">    Label1(skolko + 1).Visible = True

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">      skolko = skolko + 1

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">  End If

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">  Select Case skolko

<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green">' <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">проверка<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">на<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">выигрыш<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">и<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">проигрыш<span Courier New";mso-bidi-font-family:«Times New Roman»; color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">    Case 1

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">      MsgBox "

<span Courier New";mso-bidi-font-family:«Times New Roman»; color:black;mso-ansi-language:RU">Вы<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black"> <span Courier New";mso-bidi-font-family:«Times New Roman»; color:black;mso-ansi-language:RU">выиграли<span Courier New";mso-bidi-font-family:«Times New Roman»; color:black">!": End

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">    Case 10

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">      MsgBox "

<span Courier New";mso-bidi-font-family:«Times New Roman»; color:black;mso-ansi-language:RU">Вы<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black"> <span Courier New";mso-bidi-font-family:«Times New Roman»; color:black;mso-ansi-language:RU">проиграли<span Courier New";mso-bidi-font-family:«Times New Roman»; color:black">.": End

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">  End Select

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:black">

<span Courier New";mso-bidi-font-family: «Times New Roman»;color:black;mso-ansi-language:RU">End Sub

<span Courier New";mso-bidi-font-family: «Times New Roman»;color:black;mso-ansi-language:RU">

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

Теперь другой вопрос. В предыдущем примере я показал два варианта реализации задачи: безиспользования массива объектов и с использованием его.  А можно ли реализовать как-то по-другомурешение данной игры, но всё-таки тоже используя массив объектов.

Да, можно.

          Рассматриваем ту же задачу, те же коробки, с использованиемтех же массивов элементов (… но «как-то по-другому ...» ).  Всё таже форма, всё тот же Label1(0), всётаже клавиатура ...  На метке выполняемкомбинацию клавиш Ctrl+ C, затем Ctrl+ V(отвечая положительно на появившийся вопрос диалогового окна средыразработки).  Разместите появившуюсяметку правее от имевшейся метки. Повторите ещё: Ctrl+ Vи разместите правее второй.  Продолжайте повторение до тех пор пока неразместите метку Label1(9)правее метки Label1(8).  Теперь выделите имеющиеся метки с индексамибольше единицы.  И измените свойства этихметок на противоположное — False.  Label1(1)и Label1(0) поменяйте местами.

<img src="/cache/referats/17034/image008.jpg" v:shapes="_x0000_i1028">

Объявленную переменную оставьтетакую же.  Оставлять же процедуры такимикакими они есть бессмысленно, потому что уже в «первой» процедуре — процедуре загрузки приложения в память — появится ошибка о невозможностидобавить элемент Label1(1), так как он уже существует...   Поэтому удалите все процедуры и посмотрите,какими они могут быть заменены:

<span Courier New"; mso-bidi-font-family:«Times New Roman»">Private Sub Form_Load()

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> Me.WindowState = 2

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> 

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   skolko = 1

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">End Sub

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">Private Sub Label1_Click(Index AsInteger)

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> If Fix(skolko * Rnd) + 1 = Index Then

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green">  '

<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green;mso-ansi-language:RU">если<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> "<span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">угадали<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green">" — <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">одна<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">убирается<span Courier New";mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   Label1(skolko).Visible = False

<span Courier New"; mso-bidi-font-family:«Times New Roman»">     

<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU">skolko = skolko — 1

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU"> Else

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU"> ' если не «угадали — выставляется ещёодна»

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">     

<span Courier New";mso-bidi-font-family: «Times New Roman»">skolko = skolko + 1

<span Courier New"; mso-bidi-font-family:«Times New Roman»">     If skolko <> 10 Then Label1(skolko).Visible = True

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> End If

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> Select Case skolko '

<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green;mso-ansi-language:RU">проверка<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green"> <span Courier New";mso-bidi-font-family:«Times New Roman»; color:green;mso-ansi-language:RU">на<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green"> <span Courier New";mso-bidi-font-family:«Times New Roman»; color:green;mso-ansi-language:RU">выигрыш<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green"> <span Courier New";mso-bidi-font-family:«Times New Roman»; color:green;mso-ansi-language:RU">и<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green"> <span Courier New";mso-bidi-font-family:«Times New Roman»; color:green;mso-ansi-language:RU">проигрыш<span Courier New";mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   Case 0

<span Courier New"; mso-bidi-font-family:«Times New Roman»">     MsgBox "

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">Вы<span Courier New"; mso-bidi-font-family:«Times New Roman»"> <span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:RU">выиграли<span Courier New";mso-bidi-font-family:«Times New Roman»">!":End

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">   Case 10

<span Courier New"; mso-bidi-font-family:«Times New Roman»">     MsgBox "

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">Вы<span Courier New"; mso-bidi-font-family:«Times New Roman»"> <span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:RU">проиграли<span Courier New";mso-bidi-font-family:«Times New Roman»">.":End

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> End Select

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">End Sub

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">

Завершим рассмотрение данногопримера сравнением.  Проект в первомслучае имеет размер 2,46 Кб, в последнем — 8,57 Кб.  Однако откомпилированные, исполняемые модулипо размеру одинаковы ...

Другой вопрос: а какова разница затраченного времени вобоих случаях, если второй писать «с нуля»?  Ответ, понятно, субъективен и зависит вомногом от того насколько хорошо вы знакомы со средой разработки,«видите» реализацию кода и насколько быстро набираете его.

Пример последний

или

почему «индексированные элементы управления»?

          Чтобы понять,почему корректнее в некоторых случаях говорить «индексированные элементыуправления cобщим именем», а не «массив элементовуправления» рассмотрим следующий небольшой пример.

          На форме брошены шесть кнопок, надписи которых замененызвёздочками:

<img src="/cache/referats/17034/image010.jpg" v:shapes="_x0000_i1029">

          Кнопки имеют общее имя M, аиндексы у всех разные: 204, 192, 209, 67, 200, 194 (в порядке расположения наформе слева направо).  Отсюда понятно,что позиция на экране элементов управления не имеет значения, даже если у нихобщее имя.

          А вот иготовый программный код:

<span Courier New"; mso-bidi-font-family:«Times New Roman»">Private Sub M_Click(Index As Integer)

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»"> M(Index).Caption = Chr(Index) '

<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green;mso-ansi-language:RU">надпись<span Courier New"; mso-bidi-font-family:«Times New Roman»;color:green"> <span Courier New";mso-bidi-font-family:«Times New Roman»; color:green;mso-ansi-language:RU">кнопки<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> — <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">символ<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">номер<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> index <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">взятый<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">из<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> <span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">таблицы<span Courier New";mso-bidi-font-family:«Times New Roman»; color:green"> Ascii-<span Courier New";mso-bidi-font-family: «Times New Roman»;color:green;mso-ansi-language:RU">символов<span Courier New";mso-bidi-font-family:«Times New Roman»">

<span Courier New"; mso-bidi-font-family:«Times New Roman»">

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">End Sub

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">

Что же выполнит компьютер с помощью этих строчек?  Во-первых, это процедура обработки щелчка поодной из кнопок у которой имя M, аиндекс Index(равен67, 192, 194, 200, 204 или 209). Во-вторых, щёлкая по всем кнопкам прочитаем: «МАССИВ».

          Далее вэту же процедуру впишите:

<span Courier New"; mso-bidi-font-family:«Times New Roman»">M

<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:RU">(68).<span Courier New";mso-bidi-font-family:«Times New Roman»">Caption<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU">=«Элемент с индексом 68 не существует»

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">

Нажмите F5.  Щёлкните по одной любой кнопке.  Получится ошибка: «элемента управления стаким индексом не существует».  Тоесть, обращаться к ранее несозданным элементам управления не просто не имеетсмысла, а вызывает крах программы.  Хотяв обыкновенном массиве M(67 to209), элемент M(68) будетсуществовать вне зависимости от того придавали ли мы какое-то значение ему илинет.  Как видите определения массиваэлементов управления и «обычного» массива различны.

<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:RU">

Назовём всё своими именами

          Итак,если уж многие и называют, то чему объясняется в статье «массивы элементовуправления», сформулируем определение массивов элементов управления.  Кроме того, обобщим сказанное и добавимновое.

Что?

          Итак, массив элементов управления состоит из элементовуправления (элементы массива), которые создаются при построении визуальнойчасти интерфейса пользователя и/или догружаютсяпрограммно (могут быть динамическими). Каждый элемент массива имеет уникальный идентификатор называемыйиндексом, который есть целое неотрицательное число, не превышающее 32767 (зависитот ОЗУ).  Индексы массива необязательночередуются.  Позиция элементов массивапроизвольная.

Как?

Массивэлементов можно создать, бросая один и тот же интересующий инструмент на формуи изменяя свойство Index.  Кроме того, если существует хотя бы одинэлемент управления с численным значением свойства Index, то, возможно,догрузить новые элементы массива, используя, оператор Load.  Удаляются догруженныеэлементы массива с помощью оператора Unload.

Обращениек свойствам элемента массива осуществляется аналогично тому, как обращаются ксвойствам объекта, не имеющего численного значения свойства Index.<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language:RU">

еще рефераты
Еще работы по программированию, базе данных