Динамічне додавання елементів управління

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

Є кілька способів створення масиву елементів управління, наприклад такий: ви ставите на форму контрол, при цьому встановлюючи його Index = 0, що автоматично створює масив елементів управління, де цей контрол ставати першим. потім ви додаєте контроли командою Load (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 (Index As Integer)

приклад;
На нашу форму з попереднього прикладу помістимо ще одну кнопку, і додамо такий код:

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

Але відразу попереджаю, що НЕ МОЖНА видалити елемент доданий під час проектування форми. Тому будьте обережні.

Є і другий спосіб додавання контролів на форму. Він полягає в застосуванні методу Add, який є в сімействі Controls. Цей спосіб набагато краще, тому що вам не обов'язково створювати перші елементи в масивах. Всі вже буде створюватися безпосередньо при роботі користувача з програмою. Ви можете повністю задати зміна інтерфейсу програми тільки додавши відповідний код.

Використання цього методу добре тим, що для кожного об'єкта ви можете задавати і код обробки подій, тобто ці контроли можуть бути окремими, а не елементами масиву, що значно зручніше.

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

Схожі статті