DotNetLib:DotNetControlContainer
Installation
MSI Paket
- Laden Sie sich die aktuellste Version des DotNetControlContainers als MSI Setup-Paket herunter und installieren Sie es im System (Administrator-Berechtigung erforderlich).
- Sie können sich das MSI-Paket auch selbst aus den Quellen mittels Visual Studio erstellen.
Batch Scripts
- Verwenden Sie aus den Installationsdateien das Script RegisterTLBs.cmd um den DotNetControlContainers im System zu registrieren (Administrator-Berechtigung erforderlich).
Beispiele / HOWTOs
Minimalbeispiel
- Dieses Beispiel demonstriert den minimalen Ansatz, Sie benötigen kein eigenes .NET Control-Projekt.
- Installieren Sie den DotNetControlContainer im System
- 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.
- 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 dem Formular folgenden Code hinzu
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
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
- Sprache: VB.Net
- .NET Framework Version 3.5
- Projekt-Typ: Klassenbibliothek
- Projekt-Name: ClassLibrary1
- 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
- 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
- Wechseln Sie in die Quellcode-Bearbeitung (z.B. Taste [F7]) und übernehmen Sie den folgenden Code für das Control:
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
- Wechseln Sie in die Eigenschaften des Projekts ClassLibrary1, in der Reiterkarte Anwendung klicken Sie auf den Button [Assemblyinformationen] und aktivieren im sich öffnenden Fenster die Option Assembly COM-sichtbar machen
- Erstellen sie das Projekt, kopieren Sie die Datei ClassLibrary1.dll aus dem Debug-Verzeichnis an einen belieben Ort
- Die folgenden Erläuterungen gehen davon aus, dass sich die Access-Datenbank sowie die Datei ClassLibrary1.dll im selben Verzeichnis befinden.
- Installieren Sie den DotNetControlContainer im System
- 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.
- 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 dem Formular folgenden Code hinzu
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
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 DotNetDataGridView mittels Subversion aus:
svn co https://svn.access-codelib.net/svn/DotNetLib/trunk/office/access/forms/DotNetDataGridView
- 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
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
- Fügen Sie der Datenbank eine Tabelle mit dem Namen Tabelle1 hinzu.