Sam777e писал(а):Excel, VBA
Ну тут дело не в самом VBA или VB6, а только в компонентах, которые в используются. И тут то и проявляется вся разница. Например VB6 поддерживает массивы контролов, и на одну форму можно положить несколько контролов с одинаковым именем, но разными индексами и даже сделать для них общий обработчик событий, а в VBA такое уже не прокатывает, что порой бывает просто жутко неудобно. Ну и других отличий тоже достаточно, просто привел пример самого наболевшего.Qwertiy писал(а):Интересно, это так всегда было, или VBA развивается так?
Да, так оно и есть, потому, что контрол Frame из состава UserForm, входящего в VBA реализует свойство Controls, которое к тому же еще является и свойством по умолчанию, а у VB6'шного Frame такого свойства нет, поэтому такая метода не прокатывает.Qwertiy писал(а):Кстати, есть подозрение, что можно сразу использовать Frame1.Controls, а не Me.Controls("Frame1").Conrols.
ger_kar писал(а):Например, можно было бы перечислять все контролы на форме и у каждого делать проверку на принадлежность к нужному контейнеру, но это куча лишней не кому не нужной работы, так как контролов на форме достаточно много, а подключать нужно лишь небольшую часть.
Public ctl as FormControls
...
Set ctl = New FormControls
ctl.AddControl txtField1, lblField1
...
ctl.Enable = False 'batch disable
Set ctl.DataSource = Data1 'batch binding
ctl.Reset 'batch clear
ger_kar писал(а):Можно поступить по другому, искать не контролы, а окна им принадлежащие.
Qwertiy писал(а):Интересно, это так всегда было, или VBA развивается так?
ger_kar писал(а):Да, так оно и есть, потому, что контрол Frame из состава UserForm, входящего в VBA реализует свойство Controls, которое к тому же еще является и свойством по умолчанию, а у VB6'шного Frame такого свойства нет, поэтому такая метода не прокатывает.
Спасибо за идею, тогда уж можно сразу наверное сделать UserControl - контейнер. Хотя даже не знаю, возможно ли делать UserControl'ы контейнеры, надо посмотреть, ни разу такого не делалalibek писал(а):Впрочем правильнее будет при запуске программы создать коллекцию из элементов управления и обходить коллекцию.Следующая степень — написать класс-контроллер, в который добавляются элементы управления (при старте) и который будет управлять контролируемыми элементами, примерно так:
Ну такой подход точно идет в разрез с принципом лени.alibek писал(а):Даже если их тысяча, время на их перебор будет незначительным на фоне остальной работы.
Не понял момента. Это к чему относится? Если например известен адрес объекта, который по сути будет адресом (ссылкой) на интерфейс этого объекта, то какой еще объект нужно получать через Get/Putmem?Кривоус Анатолий писал(а):Можно через Set/GetProp устанавливать/получать адрес объекта. Потом через Get/Putmem, __vbaObjSet(AddRef) получать сам объект.
Ну это же свойство никак не заменяет свойства Controls. Через это свойство можно только получить ссылку на объект-контейнер, на котором лежит контрол.alibek писал(а):У всех визуальных элементов управления VB есть свойство Container.
ger_kar писал(а):Не понял момента. Это к чему относится? Если например известен адрес объекта, который по сути будет адресом (ссылкой) на интерфейс этого объекта, то какой еще объект нужно получать через Get/Putmem?
Сейчас этот форум просматривают: Google-бот и гости: 71