| Дата публикации статьи: 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 применяется обычно 
  при добавлении статических объектов, когда и обрабатывать ничего не надо.
 
 
 
 |