Gemeinsam zu mehr Effizienz in der Anwendungserstellung
(VB UserControl (Beispiel)) |
(→DotNetDataGridView) |
||
(Der Versionsvergleich bezieht 17 dazwischenliegende Versionen mit ein.) | |||
Zeile 4: | Zeile 4: | ||
* Laden Sie sich die aktuellste Version des DotNetControlContainers als [http://sten-schmidt.net/AccessCodeLib/NightlyBuilds/DotNetControlContainer/ MSI Setup-Paket] herunter und installieren Sie es im System (Administrator-Berechtigung erforderlich). | * Laden Sie sich die aktuellste Version des DotNetControlContainers als [http://sten-schmidt.net/AccessCodeLib/NightlyBuilds/DotNetControlContainer/ MSI Setup-Paket] herunter und installieren Sie es im System (Administrator-Berechtigung erforderlich). | ||
+ | * Sie können sich das MSI-Paket auch selbst aus den [https://svn.access-codelib.net/svn/DotNetLib/trunk/office/access/forms/DotNetControlContainer/ Quellen] mittels Visual Studio erstellen. | ||
==Batch Scripts== | ==Batch Scripts== | ||
Zeile 9: | Zeile 10: | ||
* Verwenden Sie aus den [https://svn.access-codelib.net/svn/DotNetLib/trunk/office/access/forms/DotNetControlContainer/Lib/ Installationsdateien] das Script ''RegisterTLBs.cmd'' um den DotNetControlContainers im System zu registrieren (Administrator-Berechtigung erforderlich). | * Verwenden Sie aus den [https://svn.access-codelib.net/svn/DotNetLib/trunk/office/access/forms/DotNetControlContainer/Lib/ Installationsdateien] das Script ''RegisterTLBs.cmd'' um den DotNetControlContainers im System zu registrieren (Administrator-Berechtigung erforderlich). | ||
- | = | + | =Beispiele / HOWTOs= |
==Minimalbeispiel== | ==Minimalbeispiel== | ||
+ | * Dieses Beispiel demonstriert den minimalen Ansatz, Sie benötigen kein eigenes .NET Control-Projekt. | ||
* Installieren Sie den DotNetControlContainer im System | * Installieren Sie den DotNetControlContainer im System | ||
* Erstellen Sie eine leere Access Testdatenbank (mdb oder accdb) | * Erstellen Sie eine leere Access Testdatenbank (mdb oder accdb) | ||
Zeile 27: | Zeile 29: | ||
Option Compare Database | Option Compare Database | ||
Option Explicit | Option Explicit | ||
- | + | ||
- | + | ||
- | + | ||
Private Sub Befehl1_Click() | Private Sub Befehl1_Click() | ||
- | + | ||
Dim DllPath As String | Dim DllPath As String | ||
DllPath = "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll" | DllPath = "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll" | ||
- | + | ||
+ | Dim WinForm As Object | ||
+ | |||
With New NetComDomain | With New NetComDomain | ||
Set WinForm = .CreateObject("Form", "System.Windows.Forms", DllPath) | Set WinForm = .CreateObject("Form", "System.Windows.Forms", DllPath) | ||
- | |||
- | |||
- | |||
WinForm.TopLevel = False | WinForm.TopLevel = False | ||
End With | End With | ||
- | + | ||
Me.ControlContainer0.Object.LoadControl WinForm | Me.ControlContainer0.Object.LoadControl WinForm | ||
- | + | ||
- | WinForm.Show | + | Set WinForm = Nothing |
- | + | ||
+ | With Me.ControlContainer0.Object.Control | ||
+ | .Text = "Das ist ein .NET Winform" | ||
+ | .StartPosition = 1 | ||
+ | .ShowIcon = False | ||
+ | .Show | ||
+ | End With | ||
+ | |||
End Sub | End Sub | ||
</source> | </source> | ||
Zeile 54: | Zeile 60: | ||
==VB.NET UserControl== | ==VB.NET UserControl== | ||
+ | * Dieses Beispiel zeigt wie sie sich ein sehr einfaches .NET Control mit VB.NET erstellen und es mittels des DotNetControlContainers verwenden. Die COM-Sichtbarkeit wird aktiviert, es wird jedoch kein separates COM-Interface definiert. | ||
* Erstellen Sie mit Visual Studio ein neues Klassenbibliotheks-Projekt | * Erstellen Sie mit Visual Studio ein neues Klassenbibliotheks-Projekt | ||
** Sprache: VB.Net | ** Sprache: VB.Net | ||
Zeile 61: | Zeile 68: | ||
* Löschen Sie die automatisch generierte Klasse ''Class1.vb'' | * Löschen Sie die automatisch generierte Klasse ''Class1.vb'' | ||
* Fügen Sie über die Funktion ''Neues Element hinzufügen'' ein neues Benutzersteuerelement ein und übernehmen Sie die vorgeschlagene Bezeichnung ''UserControl1.vb'' | * Fügen Sie über die Funktion ''Neues Element hinzufügen'' ein neues Benutzersteuerelement ein und übernehmen Sie die vorgeschlagene Bezeichnung ''UserControl1.vb'' | ||
+ | * Beachten Sie, dass der Projekt-Name ''ClassLibrary1'' (Namespace) sowie der Klassenname ''UserControl1'' später für den Aufruf der CreateObject-Methode der NetComDomain-Klasse von Bedeutung ist. | ||
* Fügen Sie auf dem UserControl1 einen Button ''Button1'' ein | * Fügen Sie auf dem UserControl1 einen Button ''Button1'' ein | ||
* Wechseln Sie in die Quellcode-Bearbeitung (z.B. Taste [F7]) und übernehmen Sie den folgenden Code für das Control: | * Wechseln Sie in die Quellcode-Bearbeitung (z.B. Taste [F7]) und übernehmen Sie den folgenden Code für das Control: | ||
Zeile 72: | Zeile 80: | ||
Public Function SayHello() As String | Public Function SayHello() As String | ||
- | + | Return "Hallo, ich bin eine Public Function!" | |
End Function | End Function | ||
Zeile 83: | Zeile 91: | ||
* Installieren Sie den DotNetControlContainer im System | * Installieren Sie den DotNetControlContainer im System | ||
* Erstellen Sie eine leere Access Testdatenbank (mdb oder accdb) | * Erstellen Sie eine leere Access Testdatenbank (mdb oder accdb) | ||
- | * Importieren Sie die Klasse NetComDomain aus der Access CodeLib | + | * Importieren Sie die Klasse [http://source.access-codelib.net/filedetails.php?repname=CodeLib+%28Entwurf%2C+branches%2Fdraft%29&path=%2Fcom%2FNetComDomain.cls NetComDomain] aus der Access CodeLib |
- | * Wenn Sie für den Import nicht den Import Assistenten der Access CodeLib verwenden, müssen Sie händisch einen Verweis auf C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb sowie einen Verweis auf C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscoree.tlb hinzufügen. | + | ** Wenn Sie für den Import nicht den Import Assistenten der Access CodeLib verwenden, müssen Sie händisch einen Verweis auf C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb sowie einen Verweis auf C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscoree.tlb hinzufügen. |
* Erstellen Sie ein neues, leeres Formular und öffnen Sie es im Entwurfsmodus | * Erstellen Sie ein neues, leeres Formular und öffnen Sie es im Entwurfsmodus | ||
* Wählen Sie im Menü die Option ActiveX Steuerelemente und fügen Sie ein neues ACLibControlConatiner.ControlContainer Objekt ein | * Wählen Sie im Menü die Option ActiveX Steuerelemente und fügen Sie ein neues ACLibControlConatiner.ControlContainer Objekt ein | ||
Zeile 101: | Zeile 109: | ||
DllPath = Application.CodeProject.Path & "\" & "ClassLibrary1.dll" | DllPath = Application.CodeProject.Path & "\" & "ClassLibrary1.dll" | ||
- | |||
With New NetComDomain | With New NetComDomain | ||
- | + | Me.ControlContainer0.Object.LoadControl .CreateObject("UserControl1", "ClassLibrary1", DllPath) | |
End With | End With | ||
- | Me.ControlContainer0.Object. | + | MsgBox Me.ControlContainer0.Object.Control.SayHello |
+ | |||
+ | End Sub | ||
+ | </source> | ||
- | + | [[Datei:DotNetLib_DotNetControlContainer_VBNetUserControl.png]] | |
+ | |||
+ | ==DotNetDataGridView== | ||
+ | |||
+ | * Dieses Beispiel zeigt exemplarisch die Bereitstellung eines DataGridViews sowie die Nutzung von Events. Hierzu wird ein entsprechendes COM-Interface definiert und über eine generierte TLB-Datei in Access/VBA bereitgestellt. Das Hinzufügen des Verweises auf die TLB-Datei ist eine Voraussetzung um Events (siehe WithEvents-Deklaration des GridView-Objekts) nutzen zu können. | ||
+ | * Checken Sie die aktuelle Version des [https://svn.access-codelib.net/svn/DotNetLib/trunk/office/access/forms/DotNetDataGridView DotNetDataGridView] mittels Subversion aus: | ||
+ | |||
+ | <source> | ||
+ | svn co https://svn.access-codelib.net/svn/DotNetLib/trunk/office/access/forms/DotNetDataGridView | ||
+ | </source> | ||
+ | |||
+ | * Erstellen Sie das Projekt mit Visual Studio und kopieren Sie aus dem Debug-Ordner die Dateien DotNetDataGridView.dll und DotNetDataGridView.tlb in ein beliebiges Verzeichnis. | ||
+ | * Erstellen Sie eine leere Access Testdatenbank (mdb oder accdb) | ||
+ | * Importieren Sie die Klasse NetComDomain aus der Access CodeLib | ||
+ | ** Wenn Sie für den Import nicht den Import Assistenten der Access CodeLib verwenden, müssen Sie händisch einen Verweis auf C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb sowie einen Verweis auf C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscoree.tlb hinzufügen. | ||
+ | * Fügen Sie einen Verweis auf die Datei DotNetDataGridView.tlb hinzu (Button Durchsuchen im Verweis-Dialog). | ||
+ | * Fügen Sie einen Verweis auf die Microsoft ActiveX Data Objects Library hinzu | ||
+ | * Erstellen Sie ein neues, leeres Formular und öffnen Sie es im Entwurfsmodus | ||
+ | * Wählen Sie im Menü die Option ActiveX Steuerelemente und fügen Sie ein neues ACLibControlConatiner.ControlContainer Objekt ein | ||
+ | * Prüfen Sie dass der Name des Controls im Formular ControlContainer0 lautet | ||
+ | * Wenn Sie Access ab Version 2007 (oder Neuer) verwenden setzen Sie in den Objekteigenschaften des Elements ControlContainer0 die Eigenschaft Horizontaler Anker sowie die Eigenschaft Vertikaler Anker auf Beide. | ||
+ | * Fügen Sie in das Formular einen Button Befehl1 ein. | ||
+ | * Fügen Sie in das Formular einen Button Befehl2 ein. | ||
+ | * Fügen Sie dem Formular folgenden Code hinzu | ||
+ | |||
+ | <source lang="vb"> | ||
+ | Option Compare Database | ||
+ | Option Explicit | ||
+ | |||
+ | Private WithEvents GridView As DotNetDataGridView.DotNetDataGridView | ||
+ | Private adodbRS As ADODB.Recordset | ||
+ | |||
+ | Private Sub Form_Load() | ||
+ | |||
+ | With New NetComDomain | ||
+ | Set GridView = .CreateObject("DotNetDataGridView", "ACLibDotNet", CodeProject.Path & "\" & "DotNetDataGridView.dll") | ||
+ | Me.ControlContainer0.Object.LoadControl GridView | ||
+ | End With | ||
- | Set | + | End Sub |
+ | |||
+ | Private Sub Form_Close() | ||
+ | |||
+ | Set GridView = Nothing | ||
+ | |||
+ | adodbRS.Close | ||
+ | Set adodbRS = Nothing | ||
+ | End Sub | ||
+ | |||
+ | Private Sub Befehl1_Click() | ||
+ | |||
+ | Set adodbRS = New ADODB.Recordset | ||
+ | adodbRS.Open "SELECT * FROM Tabelle1;", CurrentProject.Connection, adOpenDynamic, adLockOptimistic | ||
+ | |||
+ | GridView.readFromRecordSet adodbRS | ||
+ | |||
+ | End Sub | ||
+ | |||
+ | Private Sub Befehl2_Click() | ||
+ | GridView.setBackgroundColor 99, 155, 255 | ||
+ | End Sub | ||
+ | |||
+ | Private Sub GridView_OnBackgroundColorChanged(ByVal message As String) | ||
+ | VBA.MsgBox "BgColor was changed to: " & message | ||
End Sub | End Sub | ||
</source> | </source> | ||
+ | |||
+ | * Fügen Sie der Datenbank eine Tabelle mit dem Namen Tabelle1 hinzu. | ||
+ | |||
+ | [[Datei:DotNetLib_DotNetControlContainer_DotNetDataGridView.png]] |
Inhaltsverzeichnis |
Option Compare Database Option Explicit Private Sub Befehl1_Click() Dim DllPath As String DllPath = "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll" Dim WinForm As Object With New NetComDomain Set WinForm = .CreateObject("Form", "System.Windows.Forms", DllPath) WinForm.TopLevel = False End With Me.ControlContainer0.Object.LoadControl WinForm Set WinForm = Nothing With Me.ControlContainer0.Object.Control .Text = "Das ist ein .NET Winform" .StartPosition = 1 .ShowIcon = False .Show End With End Sub
Public Class UserControl1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click MsgBox("Hello World") End Sub Public Function SayHello() As String Return "Hallo, ich bin eine Public Function!" End Function End Class
Option Compare Database Option Explicit Private Sub Befehl1_Click() Dim DllPath As String DllPath = Application.CodeProject.Path & "\" & "ClassLibrary1.dll" With New NetComDomain Me.ControlContainer0.Object.LoadControl .CreateObject("UserControl1", "ClassLibrary1", DllPath) End With MsgBox Me.ControlContainer0.Object.Control.SayHello End Sub
svn co https://svn.access-codelib.net/svn/DotNetLib/trunk/office/access/forms/DotNetDataGridView
Option Compare Database Option Explicit Private WithEvents GridView As DotNetDataGridView.DotNetDataGridView Private adodbRS As ADODB.Recordset Private Sub Form_Load() With New NetComDomain Set GridView = .CreateObject("DotNetDataGridView", "ACLibDotNet", CodeProject.Path & "\" & "DotNetDataGridView.dll") Me.ControlContainer0.Object.LoadControl GridView End With End Sub Private Sub Form_Close() Set GridView = Nothing adodbRS.Close Set adodbRS = Nothing End Sub Private Sub Befehl1_Click() Set adodbRS = New ADODB.Recordset adodbRS.Open "SELECT * FROM Tabelle1;", CurrentProject.Connection, adOpenDynamic, adLockOptimistic GridView.readFromRecordSet adodbRS End Sub Private Sub Befehl2_Click() GridView.setBackgroundColor 99, 155, 255 End Sub Private Sub GridView_OnBackgroundColorChanged(ByVal message As String) VBA.MsgBox "BgColor was changed to: " & message End Sub