Klasse - Beuth Hochschule für Technik Berlin

Werbung
Visual Basic
11 ActiveX EXE / Objektorientierung
Ein ActiveX EXE ist eine selbständige Programmkomponente.
Ein früherer Name war „OLE Automation Server“. Er enthält public Klassen, die von anderen
Programmen benutzt werden können (out-process Server).
Erzeugung eines Klassenmoduls:
-
Wähle ein ActiveX EXE oder ->Project->Add Class Module
Erzeugung einer public variable: public str1 As String
Erzeugung einer public procedure (wie üblich)
Erzeugung von Ereignissen
Benutzung einer Klasse vom Programm aus:
-
Erzeugung des Objektes mit dem Declaration statement oder mit dem Set statement
Setzen und lesen von Werten von Eigenschaften
Benutzung von Methoden
Freigeben eines Objektes
Grundlagen der objektorientierten Programmierung:
Kapselung: Ein Objekt hat zwei Teile, die von aussen zugänglichen Oberflächenfunktionen und deren
interne Realisierung (Klasse, neuer Datentyp)
Vererbung: Ein neues Objekt kann von einem bereits existierendem Objekt mit allen Eigenschaften
und Methoden abgeleitet werden und neue Eigenschaften dazu erhalten. (Hierarchie der Klassen)
Polymorphie: Die Methoden eines Objektes können - unter Beibehaltung des Namens - anders
implementiert werden. (Klassenspezifische Funktionen)
Visual Basic hat davon nur die Kapselung. (vorläufig ?)
Erzeugung eines Klassenmoduls:
-
Wähle ein ActiveX EXE oder ->Project->Add Class Module
Erzeugung einer public variable: public str1 As String
Erzeugung einer public procedure (wie üblich)
Erzeugung von Ereignissen
Benutzung einer Klasse vom Programm aus:
-
Erzeugung des Objektes mit dem Declaration statement oder mit dem Set statement
Setzen und lesen von Werten von Eigenschaften
Benutzung von Methoden
Freigeben eines Objektes
TFH Berlin/Steyer
11-1
Visual Basic
Klassenbeispiel 1
Klasse enthält nur einen Text
Formular
Klasse
Public name As String
Diese Klasse kann von Projekten benutzt werden.
Code
'Deklaration eines Exemplars
Dim x As New Class1
Private Sub Command1_Click()
'Benutzung zur Ausgabe
MsgBox x.name
End Sub
Private Sub Command2_Click()
'Benutzung zur Eingabe
x.name = InputBox("Bitte was eingeben")
End Sub
TFH Berlin/Steyer
11-2
Visual Basic
Klassenbeispiel 2
Klasse enthält zwei Texte
Formular
Klasse:
Public title As String
Public author As String
Code:
'Zwei Deklarationen
Dim b1 As New Class1
Dim b2 As New Class1
Private Sub Command1_Click()
'Buch 1 anlegen
b1.title = InputBox("Titel eingeben")
b1.author = InputBox("Autor eingeben")
End Sub
Private Sub Command3_Click()
'Buch 1 ausgeben
MsgBox b1.title
MsgBox b1.author
End Sub
Private Sub Command2_Click()
'Buch 2 anlegen
b2.title = InputBox("Titel eingeben")
b2.author = InputBox("Autor eingeben")
End Sub
Private Sub Command4_Click()
'Buch 2 ausgeben
MsgBox b2.title
MsgBox b2.author
End Sub
TFH Berlin/Steyer
11-3
Visual Basic
Klassenbeispiel 3
Personenklasse
Klasse:
Public nummer As Integer
Public name As String
Public geburtsdatum As Date
Public Function alter()
alter = DateDiff("yyyy", geburtsdatum, Now)
End Function
Public Sub wahlspruch()
i = Int(1 + Rnd * 5)
Select Case i
Case 1
MsgBox "Suchet, so werdet ihr finden."
Case 2
MsgBox "Bleib immer dir selber treu."
Case 3
MsgBox "Üb immer Treu und Redlichkeit."
Case 4
MsgBox "Du sollst nicht Ehebrechen."
Case 5
MsgBox "Nach dem Sieg binde den Helm fester."
End Select
End Sub
Code:
'Deklaration für 1 Person
Dim p1 As New Class1
Private Sub Command1_Click()
'eingeben
p1.nummer = InputBox("Nummer eingeben")
p1.name = InputBox("Name eingeben")
p1.geburtsdatum = InputBox("Geburtsdatum eingeben")
End Sub
TFH Berlin/Steyer
Private Sub Command2_Click()
'ausgeben
MsgBox p1.nummer
MsgBox p1.name
MsgBox p1.geburtsdatum
MsgBox p1.alter
p1.wahlspruch
End Sub
11-4
Visual Basic
Klassenbeispiel 4
Klasse mit Zahl und Ereignis
Klasse:
Public Event error(ByVal errnr As Integer)
Public wert As Integer
Public Sub meinemethode(ByVal wert As Integer)
If wert < 0 Then
RaiseEvent error(-1)
Else
RaiseEvent error(1)
End If
End Sub
Code:
'Deklaration
Dim WithEvents x As Class1
Private Sub Form_Load()
'Generierung eines Exemplars
Set x = New Class1
End Sub
Private Sub Command1_Click()
'Wert besetzen
x.wert = InputBox("wert:")
End Sub
Private Sub Command2_Click()
'Fehler hervorrufen
x.meinemethode (x.wert)
End Sub
TFH Berlin/Steyer
Private Sub x_error(ByVal errnr As Integer)
'Fehler abfragen
MsgBox errnr
End Sub
11-5
Visual Basic
Collection
erzeugen
mit New
einfügen
Es werden nur Zeiger eingetragen, es kann also jedes beliebige Objekt eingefügt werden.
mit Add
Schlüssel
zweiter Parameter
Zugriff mit Eigenschaften und Methoden
Count
Remove, RemoveAll
Exists
Keys (nur Schlüssel), Items (Elemente)
For each element in <collection>
TFH Berlin/Steyer
11-6
Visual Basic
Klassenbeispiel 5
Klasse Person mit Collection
Klasse:
Public nummer As Integer
Public name As String
Public gebdat As Variant
Public Function alter() As Integer
alter = DateDiff("yyyy", gebdat, Now)
End Function
Code:
'Variable für Person, Variable für Collection
Dim p As Class1
Dim c As New Collection
Private Sub Command1_Click()
'neue Person erzeugen, zur Collection hinzufügen
Dim datum As String
Set p = New Class1
p.nummer = InputBox("Nummer eingeben")
p.name = InputBox("Name eingeben")
p.gebdat = InputBox("Geburtsdatum eingeben")
c.Add p, Str(p.nummer)
End Sub
Private Sub Command2_Click()
Print c.Count
End Sub
TFH Berlin/Steyer
Private Sub Command4_Click()
nr = InputBox("Nummer eingeben")
c.Remove Str(nr)
End Sub
Private Sub Command3_Click()
For Each element In c
MsgBox element.nummer
MsgBox element.name
MsgBox element.gebdat
MsgBox element.alter
Next element
End Sub
11-7
Visual Basic
Klassenbeispiel 6
Klasse Person mit Collection und Formular
TFH Berlin/Steyer
11-8
Visual Basic
Klasse:
Public nummer As Integer
Public name As String
Public geburtsdatum As Date
Public Function alter()
alter = DateDiff("yyyy", geburtsdatum, Now)
End Function
Code:
'deklarieren
Dim p As Class1
Dim c As New Collection
Private Sub Command1_Click()
'Formular öffnen
Form2.Show
End Sub
Private Sub Command2_Click()
'Länge der Collection anzeigen
Print c.Count
End Sub
Private Sub Command3_Click()
Form3.Show
For Each element In c
MsgBox element.nummer
MsgBox element.name
MsgBox element.geburtsdatum
MsgBox element.alter
Next element
End Sub
Private Sub Command4_Click()
Set p = New Class1
p.nummer = Val(Form2.Text1)
p.name = Form2.Text2
p.geburtsdatum = Val(Form2.Text3)
MsgBox p.nummer
MsgBox p.name
MsgBox p.geburtsdatum
MsgBox p.alter
c.Add p, Str(p.nummer)
End Sub
TFH Berlin/Steyer
11-9
Visual Basic
Klassenbeispiel 7
Klasse Person mit Datenbank
TFH Berlin/Steyer
11-10
Visual Basic
Klasse:
Public nummer As Integer
Public name As String
Public geburtsdatum As Date
Public Function alter()
alter = DateDiff("yyyy", geburtsdatum, Now)
End Function
Code:
Dim p As Class1
Dim c As New Collection
Private Sub Command1_Click()
Form2.Show
End Sub
Private Sub Command3_Click()
Form3.Show
End Sub
Private Sub Command4_Click()
'in Datenbank schreiben
Set p = New Class1
p.nummer = Val(Form2.Text1)
p.name = Form2.Text2
p.geburtsdatum = Val(Form2.Text3)
Dim db As Database
Dim ta As Recordset
Set db = DBEngine.Workspaces(0).Databases(0)
Set ta = db.OpenRecordset("person")
ta.AddNew
ta![nummer] = p.nummer
ta![name] = p.name
ta![geburtsdatum] = p.geburtsdatum
ta![alter] = p.alter
ta.Update
ta.Close
End Sub
Private Sub Command1_Click()
aus Datenbank holen
Set p = New Class1
Dim db As Database
Dim ta As Recordset
Set db = DBEngine.Workspaces(0).Databases(0)
Set ta = db.OpenRecordset("person")
ta.MoveFirst
While Not ta.EOF
[Text1] = ta![nummer]
[Text2] = ta![name]
[Text3] = ta![geburtsdatum]
[Text4] = ta![alter]
MsgBox "Weiter?"
ta.MoveNext
Wend
ta.Close
End Sub
TFH Berlin/Steyer
11-11
Visual Basic
Projekttypen
Standard EXE
Standard-Windows-Programm mit Formularen
ActiveX Control
Eigenes Kontrollelement (OCX), z.B. Treiber, Plug-In
Kann in vielen anderen Windows-Anwendungen benutzt werden
ActiveX EXE
Programm mit public Klassen, die von einem anderen Programm aufgerufen werden können ("OLE
automation server")
ActiveX DLL
Wie ActiveX EXE, aber in Form einer DLL, kann von einem anderen Programm aufgerufen werden,
läuft innerhalb des aufrufenden Prozesses als thread
Standard EXE
ActiveX Control
(einbettbar über Toolbox oder Menü)
ActiveX EXE
(einbettbar über Menü,
einzelnes Programm, out-of-process)
ActiveX DLL
(n Funktionen, in-process)
TFH Berlin/Steyer
11-12
Visual Basic
Erzeugung einer eigenen Klasse
->Projekt->Klassenmodul hinzufügen: Es öffnet sich das Codefenster.
Vorteil: Kapselung von Daten und Code, überall verwendbar
Hinzufügen von Eigenschaften
entweder als einfache public-Variable (zugreifbar mit Klassenname als Präfix)
Bsp.: nur Datensatz oder intelligenter Datensatz
Public title As String
Public author As String
oder mit Eigenschaftsprozeduren (wenn beim Lesen oder Setzen noch Code ausgeführt werden soll)
Public Property Get BackColor1() As OLE_COLOR
BackColor1 = UserControl.BackColor
End Property
Public Property Let BackColor2(ByVal New_BackColor As OLE_COLOR)
UserControl.BackColor = New_BackColor
PropertyChanged "BackColor"
End Property
Hinzufügen von Methoden
als einfache public-Sub oder public-Funktion (zugreifbar mit Klassenname als Präfix)
Bsp.: Mehrwertsteuer
Hinzufügen von Ereignissen
In der Klasse können Ereignisse erzeugt werden, auf die andere Windows-Prozeduren reagieren
können.
1) Deklaration des Ereignisses in der Klasse
2) Erzeugung des Ereignisses mit dem Befehl RaiseEvent
3) Schreiben einer entsprechenden Ereignisprozedur ausserhalb.
Bsp.: Ausgabe von Statusmeldungen bei lange laufenden Klassenaktionen
TFH Berlin/Steyer
11-13
Visual Basic
Hauptprogramm kommuniziert mit der Klasse
über Eigenschaftsprozeduren
Routinen in der Klasse:
Public Property Get BackColor1() As OLE_COLOR
BackColor1 = UserControl.BackColor
End Property
Public Property Let BackColor2(ByVal New_BackColor As OLE_COLOR)
UserControl.BackColor = New_BackColor
PropertyChanged "BackColor"
End Property
Aufrufe ausserhalb im Hauptprogramm:
Private Sub Command1_Click()
MsgBox UserControl.BackColor1
End Sub
Private Sub Command2_Click()
UserControl.BackColor2 = 255
End Sub
Private Sub Command3_Click()
UserControl.BackColor2 = 65535
End Sub
TFH Berlin/Steyer
11-14
Visual Basic
Collection
Dim c As New Collection
Dim element, summe As Integer
Liste aufbauen
Private Sub Command2_Click()
c.Add "eine Zeichenkette", "abc"
End Sub
Private Sub Command3_Click()
c.Add 123123, "def"
End Sub
Private Sub Command4_Click()
c.Add Form1, "ghi"
End Sub
Private Sub Command5_Click()
c.Add Command1, "jkl"
End Sub
Private Sub Command6_Click()
Print c.Count
End Sub
TFH Berlin/Steyer
11-15
Visual Basic
Zugreifen, Manipulieren
Private Sub Command11_Click()
Print c(1)
End Sub
Private Sub Command9_Click()
Print c("def")
End Sub
Private Sub Command10_Click()
Print c![jkl].Caption
End Sub
Private Sub Command7_Click()
c.Remove "abc"
End Sub
Private Sub Command8_Click()
Print c(1)
End Sub
Zahlencollection, Schleife, Addieren
Private Sub Command12_Click()
c.Remove "def"
c.Remove "ghi"
c.Remove "jkl"
Print c.Count
c.Add 1, "a"
c.Add 2, "b"
c.Add 3, "c"
Print c.Count
End Sub
Private Sub Command13_Click()
summe = 0
For Each element In c
summe = summe + element
Next element
MsgBox summe
End Sub
TFH Berlin/Steyer
11-16
Herunterladen