Wir haben eine ziemlich schwere ms-access App entwickelt, mit etwa 300 Formularen (ja!). Da der Code diese Formulare instanziiert (und nicht nur "öffnet"), können mehrere Instanzen desselben Formulars auf dem Bildschirm angezeigt werden.Wie ms-Zugriffsformulare in C# -Modul einbetten?
die Einschränkungen von VBA zu umgehen, und die schlechte Umsetzung einiger Konzepte der objektorientierten wie Vererbung, Interface, Verkapselung, etc, ist die Verwaltung von Code:
- eine Sammlung Fenstern aus der ganzen aktive Instanzen unserer Formulare.
- ein "Geisterfenster" -Objekt, das alle zusätzlichen Eigenschaften und Methoden enthält, die für unseren Code benötigt werden.
So, als Beispiel, wenn ich die Standard-Eigenschaft eines meiner Instanzen erreichen wollen, kann ich schreiben:
MyWindows.accessWindow(hWnd).name
Wo hWnd den Griff von Windows-gegeben ist, und der Standardname Form() Name Eigenschaft
Aber wenn ich eine bestimmte Eigenschaft eines meiner Instanzen erreichen wollen, kann ich schreiben:.
MyWindows.ghostWindow(hWnd).originalRecordset
Wo Herkunft alRecordset 'enthält das ursprüngliche ADODB.recordset, das geladen wurde, als das Formular erstmalig angelegt wurde (das heißt, bevor vom Benutzer vorgenommene Änderungen ... interessant sein können!)
Es funktioniert gut, aber die Codierung kann eine echte PITA sein , besonders wenn man weiß, wie starighforward es sein könnte, etwas Ähnliches in C# zu machen, solange man das MS-Access-Formularobjekt in ein allgemeineres C# -Objekt kapseln könnte. Das ist also die Frage: könnte man das MS-Access-Formular in eine selbstgemachte C# -DLL einbetten? Ist es machbar?
Ich erwarte keine vollständige Antwort, aber ich erwarte etwas Hilfe, um auf den richtigen Weg zu kommen. Irgendwelche Ideenfreunde?
Technisch beeindruckend, aber ein kommerzielles und Wartung Minenfeld? Schlagen Sie eine inkrementelle Umschreiben starten. Das Umschreiben von Teilen Ihrer App in domänenbasierte Branchen mit klaren Abgrenzungen hat in der Vergangenheit für mich funktioniert. Das Ergebnis davon ist, dass Sie mehr C# bekommen. –