我有一个方法,给定 a VBComponent
,我可以.Designer
从那里访问 and.Controls
集合:
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 可用)?