Gemeinsam zu mehr Effizienz in der Anwendungserstellung
(→Minimalbeispiel) |
(VB UserControl (Beispiel)) |
||
Zeile 51: | Zeile 51: | ||
[[Datei:DotNetLib_DotNetControlContainer_Minimalbeispiel.jpg]] | [[Datei:DotNetLib_DotNetControlContainer_Minimalbeispiel.jpg]] | ||
+ | |||
+ | ==VB.NET UserControl== | ||
+ | |||
+ | * 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'' | ||
+ | * 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 | ||
+ | SayHello = "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 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() | ||
+ | |||
+ | Dim DllPath As String | ||
+ | DllPath = Application.CodeProject.Path & "\" & "ClassLibrary1.dll" | ||
+ | |||
+ | Dim lib As Object | ||
+ | With New NetComDomain | ||
+ | Set lib = .CreateObject("UserControl1", "ClassLibrary1", DllPath) | ||
+ | End With | ||
+ | |||
+ | Me.ControlContainer0.Object.LoadControl lib | ||
+ | |||
+ | MsgBox lib.SayHello | ||
+ | |||
+ | Set lib = Nothing | ||
+ | |||
+ | End Sub | ||
+ | </source> |
Inhaltsverzeichnis |
Option Compare Database Option Explicit Private WinForm As Object Private Sub Befehl1_Click() Dim DllPath As String DllPath = "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll" With New NetComDomain Set WinForm = .CreateObject("Form", "System.Windows.Forms", DllPath) WinForm.Text = "Das ist ein .NET Winform" WinForm.StartPosition = 1 WinForm.ShowIcon = False WinForm.TopLevel = False End With Me.ControlContainer0.Object.LoadControl WinForm WinForm.Show 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 SayHello = "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" Dim lib As Object With New NetComDomain Set lib = .CreateObject("UserControl1", "ClassLibrary1", DllPath) End With Me.ControlContainer0.Object.LoadControl lib MsgBox lib.SayHello Set lib = Nothing End Sub