を指定すると、そこからコレクションにVBComponent
アクセスできるメソッドがあります。.Designer
.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 のフォームにはデザイナ (???) がないため、VBE アドインである C# コード (つまり、何にでも簡単にしかアクセスできない) が与えられた場合、MS-Access フォームでコントロールを反復するにはどうすればよいですか? VBIDE API が利用可能になります)?