У меня есть метод, где дан VBComponent
, я могу получить доступ к .Designer
и оттуда, в .Controls
коллекции:Как я могу перебирать элементы управления в форме MS-Access?
private void DeclareControlsAsMembers(VBComponent form)
{
var designer = form.Designer;
if (designer == null)
{
return;
}
// using dynamic typing here, because not only MSForms could have a Controls collection (e.g. MS-Access forms are 'document' modules).
foreach (var control in ((dynamic)designer).Controls)
{
var declaration = new Declaration(_qualifiedName.QualifyMemberName(control.Name), ...);
OnNewDeclaration(declaration);
}
}
Проблема с этим методом является то, что, когда хозяин MS-Access, form.Designer
является null
, поэтому метод возвращается раньше.
dynamic
листинг здесь не особо полезен, кажется, что я мог бы переходить на интерфейс UserForm
, и он «просто сработает» - по крайней мере, на хосте Excel.
Но поскольку формы MS-Access не имеют конструктора (???), как мне обращаться с элементами управления с использованием итерации в форме MS-Access, учитывая код C#, который является надстройкой VBE (то есть, который может только легко получить доступ к тому, что предоставляет VBIDE API)?
Какая версия ms-access это? Поскольку версии, которые я знаю, используют немного другую модель, а другую в VBE – rene
@rene мой код должен работать * независимо от хост-приложения VBE *, поэтому ... все из них! –
Неясно, что вы подразумеваете под «недостатком» дизайнера. Будь то формы vb.net, формы FoxPro, формы Paradox или в этом случае Access, все они работают одинаково, и у всех есть разработчики форм, и у всех есть свои собственные форматы. Итак, в течение последних 30 лет я не вижу, как формы Access или формы vb.net различаются? Как было указано, всего около 4-5 строк кода VBA для итерации коллекции forms.Controls, но вы должны открыть форму для достижения этого результата. Итак, расширяйте то, что вы подразумеваете под дизайнером формы? –