2012-12-19 5 views
10

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?

+2

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. –

Antwort

3

Dies sollte durch Office-Automatisierung machbar sein.

Kurz gesagt, Sie verwenden C#, um Ihre Zugriffsanwendung zu starten, und erhalten dann das richtige Objektmodell für Ihre Formulare, so wie Sie sie in vba zur Verfügung haben.

Es ist wahrscheinlich der erste Schritt, wenn Sie mehr von C# (gut) und weniger von vba (meh) verwenden möchten, um Ihre Access App schrittweise zu verbessern/zu refaktorieren.

Weitere Details in dem MS KB-Artikel "How to automate Microsoft Access by using Visual C#"

+1

Danke für den Link. Dort könnte etwas interessantes sein –