Wiki der Access Code Library

Gemeinsam zu mehr Effizienz in der Anwendungserstellung

DotNetLib:DotNetControlContainer

Aus Access Code Library
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Minimalbeispiel)
(DotNetDataGridView)
 
(Der Versionsvergleich bezieht 22 dazwischenliegende Versionen mit ein.)
Zeile 2: Zeile 2:
==MSI Paket==
==MSI Paket==
 +
 +
* 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==
-
=Verwendung=
+
* 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)
* 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
* 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.
* 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 22: Zeile 29:
Option Compare Database
Option Compare Database
Option Explicit
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
-
Private 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
 +
</source>
 +
 
 +
[[Datei:DotNetLib_DotNetControlContainer_Minimalbeispiel.jpg]]
 +
 
 +
==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:
 +
 
 +
<source lang="vb">
 +
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
 +
</source>
 +
 
 +
* 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 [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.
 +
* 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
 +
 
 +
<source lang="vb">
 +
Option Compare Database
 +
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 = Application.CodeProject.Path & "\" & "ClassLibrary1.dll"
      
      
     With New NetComDomain
     With New NetComDomain
-
         Set WinForm = .CreateObject("Form", "System.Windows.Forms", DllPath)
+
         Me.ControlContainer0.Object.LoadControl .CreateObject("UserControl1", "ClassLibrary1", DllPath)
-
            WinForm.Text = "Das ist ein .NET Winform"
+
-
            WinForm.StartPosition = 1
+
-
            WinForm.ShowIcon = False
+
-
            WinForm.TopLevel = False
+
     End With
     End With
 +
 +
    MsgBox Me.ControlContainer0.Object.Control.SayHello
      
      
-
     Me.ControlContainer0.Object.LoadControl WinForm
+
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
      
      
-
     WinForm.Show
+
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]]

Aktuelle Version vom 20:02, 7. Aug. 2014

Inhaltsverzeichnis

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

Datei:DotNetLib_DotNetControlContainer_Minimalbeispiel.jpg

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

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

Datei:DotNetLib_DotNetControlContainer_DotNetDataGridView.png