Дата публикации статьи: 09.07.2003 00:00

Добавление новых элементов управления необходимо в приложениях, в которых заранее не известно сколько и чего потребуется, поэтому при программировании желательно предусмотреть возможность нехватки контролов, об этом и пойдет речь в данной статье.

Есть несколько способов создания массива элементов управления, например такой: вы помещаете на форму контрол, при этом устанавливая его Index = 0, что автоматически создает массив элементов управления, где этот контрол становиться первым. потом вы добавляете контролы командой Load {Control}(Index As Integer)

Пример:
Создаем простой exe проект и натягиваем на него кнопку, ставим Index=0 и пишем следующий код:

Dim mCount As Integer

Private Sub Command1_Click(Index As Integer)
mCount = mCount + 1
Load Command1(Count) 'Добавляем контрол с индексом на единицу большим, чем последний в массиве
Command1(mCount).Height = Command1(0).Height 'Устанавливаем параметры
Command1(mCount).Width = Command1(0).Width
Command1(mCount).Visible = True 'Делаем видимым
Command1(mCount).Left = Command1(mCount - 1).Left + Command1(0).Width 'Размещаем на форме
Command1(mCount).Top = Command1(0).Top
End Sub

Private Sub Form_Load()
mCount = 0 'Декларируем значение равное индексу первой в массиве кнопки
End Sub

Так мы создаем последовательность кнопок, которая увеличивается при каждом нажатии. Но мало пользы было бы от такой системы добавления если бы нельзя было бы удалять контролы. Делается это соответственно командой Unload{control}(Index As Integer)

Пример;
На нашу форму из предыдущего примера поместим еще одну кнопку, и добавим такой код:

Private Sub delet_Click()
Unload Command1(mCount)
End Sub

Но сразу предупреждаю, что НЕЛЬЗЯ удалить элемент добавленный во время проектирования формы!!!! Поэтому будьте аккуратны.

Есть и второй способ добавления контролов на форму. Он заключается в применении метода Add, который имеется в семействе Controls. Этот способ гораздо лучше, т.к. вам не обязательно создавать первые элементы в массивах. Все уже будет создаваться непосредственно при работе пользователя с программой. Вы можете полностью задать изменение интерфейса программы только лишь добавив соответствующий код.

Выглядит использование этого метода так: Object.Add (ProgID,Name,Container)
Object - Объект в который вы добавляете контролы (хотя обычно говорят для которого добавляются объекты).
ProgID - описатель нового элемента управления
Name - имя нового элемента
Container - ссылка на контейнер для нового элемента, этот параметр можно пропускать.

Использование этого метода хорошо тем, что для каждого объекта вы можете задавать и код обработки событий, т.е эти контролы могут быть отдельными, а не элементами массива, что значительно удобнее.

Пример:

Private WithEvents NewButton As CommandButton 'Сообщаем системе что хотим использовать обработчик событий с кнопкой
Private Sub NewButton_Click() 'Код обработки события нажатия на кнопку
MsgBox "Вы нажали на новую кнопку"
End Sub
Private Sub Form_Click()
Set NewButton = Controls.Add("VB.CommandButton", "NewButton") 'при клике по форме появляется новая кнопка
NewButton.Visible = True
NewButton.Height = 1000
NewButton.Width = 1000
NewButton.Top = 0
NewButton.Left = 0
NewButton.Caption = "Нажми на меня!!!!"
End Sub

Удалить элемент управления легко:
Form1.Controls.Remove "NewButton"
Таким образом вы можете добавлять любой элемент управления, назначать ему обработку событий. В общем все хорошо.

Список интендификаторов стандартных элементов управления:
VB.ComandButton - Кнопка
VB.ComboBox - Раскрывающийся список
VB.DirListBox - Список директорий
VB.DriveListBox - Список устройств
VB.FileListBox - Список файлов
VB.Form - Форма
VB.Frame - Рамка
VB.HScrollBar - Горизонтальная полоса прокрутки
VB.Image - Изображение
VB.Label - Надпись
VB.Line -Линия
VB.ListBox - Список
VB.MDIForm - MDI форма
VB.Menu - Меню
VB.OLE - OLE Компонент
VB.OptionButton - Выбор
VB.PictureBox - Картинка
VB.Shape - Окружность
VB.TextBox - Текстовое окно
VB.UserControl - Пользовательский контрол
VB.UserDocument - Пользовательский документ
VB.VScrollBar - Вертикальная полоса прокрутки
VB.Timer - Таймер

И это еще не все, но больше не помню. Да вы и сами можете в Object Browser посмотреть в модуле VB. Да и еще, если вы добавляете ActiveX контрол, который требует лицензионных ключей, то не забудьте добавить и ключ.
Динамическое добавление контролов - мощный способ изменения ваших приложений в процессе работы, наиболее удобен метод Add, а метод load применяется обычно при добавлении статических объектов, когда и обрабатывать ничего не надо.