Здравствуйте, Соколов В.В..
Долго расписывать пришлось бы. Лучше смотрите пример в файле по ссылке:
Пример создания динамической формы. Откройте файл и нажмите кнопку. Дважды кликните по текстовому полю, чтобы увидеть реакцию на двойной клик (другие события я не прописывал) и нажмите на кнопку, чтобы увидеть реакцию на ее событие.
Вкратце это работает так:
- Создаем два класса. Один для событий, другой — для компонентов. В примере это классы EventsOfControls и ControlsOnForm соответственно;
- Добавляем в проект форму (программно). Это делает процедура CreateForm(NumberOfTextBoxes As Integer), которой в качестве параметра передается количество текстовых полей, которое должно быть на форме;
- Программно записываем процедуру инициализации формы. В той же CreateForm;
- Когда мы показываем созданную, но еще пустую форму, то запускается процедура ее инициализации (UserForm_Initialize()), в которой записан вызов процедуры, добавляющей компоненты на форму GetControlsForForm(ByVal oForm As Object, ByVal NumberOfTextBoxes As Integer);
- В процедуре GetControlsForForm мы добавляем в цикле текстовые поля, связываем их с классом событий и добавляем в коллекцию класса компонентов.
Этот метод очень удобен тем, что события для компонентов можно прописывать самым обычным образом, только в модуле класса.
Спрашивайте, что непонятно