Ich habe ein Verfahren, bei dem ein VBComponent
gegeben, ich habe die .Designer
und von dort aus zugreifen kann, die .Controls
Kollektion:Wie kann ich die Steuerelemente eines MS-Access-Formulars iterieren?
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);
}
}
Das Problem bei dieser Methode ist, dass, wenn die Host-MS-Access ist, form.Designer
ist null
, so dass die Methode früh zurückkehrt.
Die dynamic
Besetzung hier ist nicht besonders nützlich, es scheint, ich könnte Casting zu einem UserForm
Schnittstelle und es würde "einfach funktionieren" - zumindest in einem Excel-Host.
Aber da MS-Access Formulare keinen Designer (???) haben, wie gehe ich über Iteration Kontrollen auf einem MS-Access-Formular, gegeben C# -Code, der ein VBE-Add-in ist nur leicht zugänglich, was auch immer die VBIDE API zur Verfügung stellt)?
Welche Version von ms-access ist das? Da die Versionen, die ich kenne, ein etwas anderes Modell verwenden als das in VBE – rene
@rene, muss mein Code funktionieren * unabhängig von der VBE-Host-Anwendung *, also ... alle 'em! –
Es ist nicht klar, was Sie unter "Mangel" eines Designers verstehen. Sei es vb.net Formen, FoxPro Formen, Paradox Formen, oder in diesem Fall Access, sie alle arbeiten sehr ähnlich und alle haben Form Designer und alle haben ihre eigenen Formate. Also, in den letzten 30 Jahren sehe ich nicht, wie Access oder vb.net Formulare anders sind? Wie bereits erwähnt, werden nur etwa 4-5 Zeilen VBA-Code verwendet, um die forms.Controls-Auflistung zu durchlaufen, aber Sie müssen das Formular öffnen, um dieses Ergebnis zu erzielen. Erweitern Sie also, was Sie unter Formular-Designer verstehen? –