Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


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

Тип Реферат
Предмет Информатика и программирование
Просмотров
1593
Размер файла
68 б
Поделиться

Ознакомительный фрагмент работы:

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

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

О чём ...

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

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

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

или

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

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

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

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

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, причём вам надо будет положительно ответить на предлагаемый вопрос среды разработки. Выполните последнее указание для всех других кнопок.

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

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

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 лучше изменить.

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

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

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

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

Да, можно.

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

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

Private Sub Form_Load()

Me.WindowState = 2

skolko = 1

End Sub

Private Sub Label1_Click(Index As Integer)

If Fix(skolko * Rnd) + 1 = Index Then

' если "угадали" - одна убирается

Label1(skolko).Visible = False

skolko = skolko - 1

Else

' если не "угадали - выставляется ещё одна"

skolko = skolko + 1

If skolko <> 10 Then Label1(skolko).Visible = True

End If

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

Case 0

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

Case 10

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

End Select

End Sub

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

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

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

или

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

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

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

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

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

Private Sub M_Click(Index As Integer)

M(Index).Caption = Chr(Index) ' надпись кнопки - символ номер index взятый из таблицы Ascii-символов

End Sub

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

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

M(68).Caption="Элемент с индексом 68 не существует"

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

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

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

Что?

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

Как?

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

Обращение к свойствам элемента массива осуществляется аналогично тому, как обращаются к свойствам объекта, не имеющего численного значения свойства Index.


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Филиал государственного бюджетного образовательного учреждения высшего образования Московской област
Спасибо Елизавете за оперативность. Так как это было важно для нас! Замечаний особых не бы...
star star star star star
РУТ
Огромное спасибо за уважительное отношение к заказчикам, быстроту и качество работы
star star star star star
ТГПУ
спасибо за помощь, работа сделана в срок и без замечаний, в полном объеме!
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

решить 6 практических

Решение задач, Спортивные сооружения

Срок сдачи к 17 дек.

только что

Задание в microsoft project

Лабораторная, Программирование

Срок сдачи к 14 дек.

только что

Решить две задачи №13 и №23

Решение задач, Теоретические основы электротехники

Срок сдачи к 15 дек.

только что

Решить 4задачи

Решение задач, Прикладная механика

Срок сдачи к 31 дек.

только что

Выполнить 2 задачи

Контрольная, Конституционное право

Срок сдачи к 12 дек.

2 минуты назад

6 заданий

Контрольная, Ветеринарная вирусология и иммунология

Срок сдачи к 6 дек.

4 минуты назад

Требуется разобрать ст. 135 Налогового кодекса по составу напогового...

Решение задач, Налоговое право

Срок сдачи к 5 дек.

4 минуты назад

ТЭД, теории кислот и оснований

Решение задач, Химия

Срок сдачи к 5 дек.

5 минут назад

Решить задание в эксель

Решение задач, Эконометрика

Срок сдачи к 6 дек.

5 минут назад

Нужно проходить тесты на сайте

Тест дистанционно, Детская психология

Срок сдачи к 31 янв.

6 минут назад

Решить 7 лабораторных

Решение задач, визуализация данных в экономике

Срок сдачи к 6 дек.

7 минут назад

Вариационные ряды

Другое, Статистика

Срок сдачи к 9 дек.

8 минут назад

Школьный кабинет химии и его роль в химико-образовательном процессе

Курсовая, Методика преподавания химии

Срок сдачи к 26 дек.

8 минут назад

Вариант 9

Решение задач, Теоретическая механика

Срок сдачи к 7 дек.

8 минут назад

9 задач по тех меху ,к 16:20

Решение задач, Техническая механика

Срок сдачи к 5 дек.

9 минут назад
9 минут назад
10 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно