Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое добавление элементов управления 
:(
    Опции темы
cardinal
Дата 29.12.2004, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



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

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

Ответ взят на: www.vbstreets.ru


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0596 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.