Rubrik: Controls · UserControl | VB-Versionen: VB6 | 20.04.05 |
DataBindings im UserControl Wie man die Data-Eigenschaften im eigenen UserControl zur Verfügung stellen kann... | ||
Autor: Roland Wutzke | Bewertung: | Views: 13.412 |
www.vb-power.net | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Sicherlich kennen Sie alle die Data-Eigenschaften einer Textbox, an der Sie ein beliebiges DataControl binden können, um so Zugriff auf eine Datenbank nehmen zu können.
Nun folgende Ausgangssituation:
Sie erstellen gerade Ihre eigenes UserControl mit einer TextBox - und dieses UserControl soll nun genau diese Eigenschaften zur Verfügung stellen. Naja, kein Problem könnte man meinen. Nehmen wir einfach den ActiveX-Schnittstellen-Assistenten und fügen diese Eigenschaften hinzu. Doch in der Eigenschaften Auflistung fehlt schon mal die DataField Eigenschaft. Also fügen wir diese Eigenschaft im nächsten Schritt manuell hinzu. Doch weit gefehlt, denn der Assistent verweigert hier gnadenlos seine Arbeit mit der Meldung „Der von Ihnen erstellte Mitgliedsname wird bereits vom Extender-Objekt verwendet".
Die Lösung liegt in den Prozedurattributen!
Damit wir nun die Data-Eigenschaften nutzen können, müssen Sie im ersten Schritt eine beliebige Eigenschaft vom Type String anlegen. Für unser Beispiel benennen wir die Eigenschaft cField. Nachdem Sie nun die Eigenschaft erzeugt haben, gehen Sie zu den Prozedurattributen im Menü "Extras" und wählen unter "Name" die Eigenschaft aus. Aktivieren Sie nun die Attribute und Datenbindungen wie in der Darstellung angezeigt.
Siehe da - wenn wir nun unser UserControl auf eine Form ziehen, steht dem Entwickler ab sofort die Data-Eigenschaften zur Verfügung. Doch es fehlt noch ein wenig Code im UserControl, damit das Ganze auch richtig funktioniert. Für unser Beispiel benötigen wir weiterhin noch eine TextBox (Text1) im UserControl. Fügen Sie jetzt den folgenden Code in das Codefenster des UserControls:
' *************************************************** ' * ' * DataBindings im UserControl ' * ' * Aktivieren Sie in den Prozedurattributen für ' * "cField" folgende Eigenschaften: ' * - Im Eigenschafenkatalog nicht anzeigen ' * - Datengebundene Eigenschaft ' * - An Daten-Feld gebunden ' * - CanPropertyChange vor Änderung aufrufen ' * - Sofort aktualisieren ' * ' * April 2005, VB-Power.net www.vb-power.net ' * ' *************************************************** Option Explicit Private Const m_def_cField As String = "" Dim m_cField As String Dim isChange As Boolean
Private Sub Text1_Change() isChange = True End Sub Private Sub Text1_Validate(Cancel As Boolean) If isChange Then PropertyChanged "cField" isChange = False End If End Sub
' Eigenschaften für Benutzersteuerelement initialisieren Private Sub UserControl_InitProperties() m_cField = m_def_cField End Sub ' Eigenschaftenwerte vom Speicher laden Private Sub UserControl_ReadProperties(PropBag As PropertyBag) m_cField = PropBag.ReadProperty("cField", m_def_cField) End Sub ' Eigenschaftenwerte in den Speicher schreiben Private Sub UserControl_WriteProperties(PropBag As PropertyBag) Call PropBag.WriteProperty("cField", m_cField, m_def_cField) End Sub
Public Property Get cField() As String m_cField = Text1.Text cField = m_cField End Property Public Property Let cField(ByVal New_cField As String) m_cField = New_cField Text1.Text = New_cField PropertyChanged "cField" End Property
Anmerkung: Die hier aufgezeigte Methode lässt sich ohne weiteres auch auf ein Label anwenden. Hierbei benötigen Sie noch nicht mal die Eigenschaft "cField". Sie können die Datenbindung direkt an die Eigenschaft "Caption" des Labels vornehmen, da das Label kein Datenfeld aktualisieren, sondern nur Anzeigen kann.
Viel Spaß mit den DataBindings