ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 10.01.2002

Diese Seite wurde zuletzt aktualisiert am 10.01.2002
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Sensible Variablen

Zurück...


Anzeige

(-hg) mailto:hg_objectvars@aboutvb.de

Wünschen Sie sich auch manchmal, dass Variablen von alleine melden könnten, wenn ihr Wert irgendwo in den Tiefen Ihrer Anwendung geändert wird? In konsequent objektorientierten Programmier-Umgebungen sind auch einfache Datentypen Objekte, die sich (meistens über Ableitung oder Vererbung) um eine solche Funktionalität erweitern lassen. In Visual Basic sind Variablen jedoch keine Objekte. Sie können allerdings Klassen erstellen, die sich wie Variablen nutzen lassen. Und eine Klasse mit der gewünschten Funktionalität zu versehen, ist schließlich kein Problem mehr.

Die Klasse, die einen "variablen" Wert repräsentieren soll, braucht nur über eine Eigenschaft des betreffenden Datentyps zu verfügen. In der Property Let-Prozedur (bzw. entsprechend in der Property Set-Prozedur bei Objekt-Datentypen) kann wie gewünscht auf die Änderung des Wertes reagiert werden - etwa durch Auslösen eines Ereignisses.

Für den Datentyp Long könnte eine solche Klasse (z.B. clsLong) so aussehen:

Public Event Change(ByVal Value As Long)

Private pValue As Long

Public Property Get Value() As Long
  Value = pValue
End Property

Public Property Let Value(New_Value As Long)
  If pValue <> New_Value Then
    pValue = New_Value
    RaiseEvent Change(pValue)
  End If
End Property

Um die Verwendung zu vereinfachen, sollte die Eigenschaft Value als Standard-Eigenschaft der Klasse deklariert werden.

Die Prozedur-ID '(Voreinstellung)' macht eine Eigenschaft zur Standard-Eigenschaft einer Klasse

Die Prozedur-ID "(Voreinstellung)" macht eine Eigenschaft zur Standard-Eigenschaft einer Klasse

Jetzt können Sie die Objekt-Variable, die die Instanz einer solchen Variablen-Klasse aufnimmt, wie eine gewöhnliche Variable verwenden - ohne explizite Angabe der Value-Eigenschaft:

Dim n As clsLong

Set n = New clsLong
' ...

n = 99
' ...
Debug.Print n

Wenn Sie nun noch an beliebiger Stelle eine Ereignisempfänger-Variable des Objekt-Typs dieser Klasse deklarieren und ihr eine Referenz auf die erzeugte Instanz zuweisen, können Sie dort auf jede Änderung des Werts reagieren. Ein kleines Beispiel:

Private WithEvents N As clsLong

Private Sub Command1_Click()
  N = N + 1
End Sub

Private Sub Form_Load()
  Set N = New clsLong
  N = 1
End Sub

Private Sub N_Change(ByVal Value As Long)
  lblN.Caption = Value
End Sub

Für die meisten VB-Standard-Datentypen (Byte, Boolean, Date, Double, Integer, Long, Single, und String) lassen sich Klassen exakt nach dem oben stehenden Muster erstellen - lediglich zu ändern ist die entsprechende Deklaration des Datentyps für Value. Eine Klasse für den Datentyp Object weicht davon ein wenig ab, da hier die Property Set-Prozedur hinzukommt und intern Zuweisungen und Vergleich angepasst werden müssen. Natürlich können Sie diesem Muster wieder entsprechend Objekt-Klassen jeden Objekt-Typs erstellen.

Public Event Change(ByVal Value As Object)

Private pValue As Object

Public Property Get Value() As Object
  Set Value = pValue
End Property

Public Property Let Value(New_Value As Object)
  zSetValue New_Value
End Property

Public Property Set Value(New_Value As Object)
  zSetValue New_Value
End Property

Private Sub zSetValue(New_Value As Object)
  If Not (pValue Is New_Value) Then
    Set pValue = New_Value
    RaiseEvent Change(pValue)
  End If
End Sub

Eine Klasse für den Datentyp Variant wird etwas komplexer. Da nicht nur Standard-Datentypen, sondern auch Objekte zugewiesen werden könnten, müssen die internen Zuweisungen und Vergleiche noch weiter differenziert und modifiziert werden:

Public Event Change(ByVal Value As Variant)

Private pValue As Variant

Public Property Get Value() As Variant
  If IsObject(pValue) Then
    Set Value = pValue
  Else
    Value = pValue
  End If
End Property

Public Property Let Value(New_Value As Variant)
  zSetValue New_Value
End Property

Public Property Set Value(New_Value As Variant)
  zSetValue New_Value
End Property

Private Sub zSetValue(New_Value As Variant)
  If IsObject(New_Value) Then
    If IsObject(pValue) Then
      If Not (pValue Is New_Value) Then
        Set pValue = New_Value
        RaiseEvent Change(pValue)
      End If
    Else
      Set pValue = New_Value
      RaiseEvent Change(pValue)
    End If
  Else
    If IsObject(pValue) Then
      Set pValue = New_Value
      RaiseEvent Change(pValue)
    ElseIf pValue <> New_Value Then
      pValue = New_Value
      RaiseEvent Change(pValue)
    End If
  End If
End Sub

Bei der Objekt-Klasse entfällt allerdings die Möglichkeit der direkten Zuweisung unter Ausnutzung der Standard-Eigenschaft, wie auch bei der Variant-Klasse, falls dieser Objekte zugewiesen werden können.


Beispiel-Projekt und Datentypen-Klassen (objectvars.zip - ca. 7,9 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer