15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как из любой точки кода найти форму, которая содержит нужный элемент управления

К каждому элементу управления на форме можно без труда обратиться, однако, если Вы используете вложенные 5-ти уровневые процедуры, то код может стать громозким и трудно читаемы. Такая проблема решается через свойство Container, которое можно использовать для получения формы. Однако элемент управления может хранится в другом элементе управления. В данном случае прийдётся идти по цепочке контейнеров, до тех пор, пока не достигните формы.

Public Function GetForm(ctr As Control) As Object
    Set GetForm = ctr.Container
    Do Until TypeOf GetForm Is Form
        Set GetForm = GetForm.Container
    Loop
End Function

Теперь, когда функция вернула объект, Вы должны привести его обратно к форме, для лучшей производительности. Далее показан пример нахождения формы, на которой расположен массив вложенных picturebox-ов:

Private Sub picNested_Click(Index As Integer)
    Dim frm As Form

    Set frm = GetForm(picNested(Index))
    MsgBox frm.Name, vbOKOnly, "Name of form"
End Sub