Diese Klasse stellt eine Eigenschaft sowie mehrere Ereignisse zur Verfügung. Sie implementiert ein Objekt, das eine übergebene Komponente beobachten kann und löst einige Ereignisse aus, wenn etwas mit dem beobachteten Objekt passiert. Die Kenntnis der ausgelösten Ereignisse ist nützlich, wenn eine Komponente oder ein Container bewegt, verändert, angezeigt oder ausgeblendet wird.
Minisini sagte zum Thema 'Watcher', dass die Klasse Watcher weit vor dem Observer (→ Kapitel 20.18 Observer) entwickelt wurde und letzterer deshalb vorzuziehen ist. Er betonte, dass ein Watcher-Objekt für ein Form-Objekt nonsens wäre, weil eine Form bereits Show()-, Hide()-, Move()- und Resize()-Events hat, weil sie eben für Fenster nützlich sind, für Buttons beispielsweise eher nicht. So verfügt zum Beispiel ein TrayIcon bereits in der Liste seiner Eigenschaften über ein Hide()- und Show()-Event und ein Watcher-Objekt ist deshalb verzichtbar.
Die Klasse Watcher besitzt nur eine Eigenschaft. Die Eigenschaft Watcher.Control vom Typ Control gibt mit Watcher.Control.Name den Namen der beobachteten Komponente zurück.
Die Klasse Watcher verfügt über vier Ereignisse, deren Beschreibung Sie in der nächsten Tabelle finden:
Ereignis | Beschreibung |
---|---|
Hide | Das Ereignis wird ausgelöst, wenn die beobachtete Komponente verborgen wird. |
Move | Das Ereignis wird ausgelöst, wenn die beobachtete Komponente bewegt wird. |
Resize | Das Ereignis wird ausgelöst, wenn die beobachtete Komponente ihre Größe ändert. |
Show | Das Ereignis wird ausgelöst, wenn die beobachtete Komponente angezeigt wird. |
Tabelle 20.10.2.1 : Events der Klasse Watcher
Das Projekt zeigt die Verwendung der vier Ereignisse und der Eigenschaft der Klasse Watcher und hat mehr historischen Wert, denn für reale Projekte würden Sie auf die Klasse Observer zurückgreifen.
' Gambas class file Private wWatcherObject1 As Watcher Private iBusy As Integer Private sControlName As String Public Sub Form_Open() FMain.Center FMain.Resizable = True wWatcherObject1 = New Watcher(FMain) As "wWatcher" sControlName = "'" & wWatcherObject1.Control.Name & "'" End ' Form_Open() Public Sub wWatcher_Show() Message.Info("Das Hauptfenster " & sControlName & " wird angezeigt!") Stop Event End ' wWatcher_Show() Public Sub wWatcher_Hide() Message.Info("Das Hauptfenster " & sControlName & " wurde versteckt!")) Stop Event End ' wWatcher_Hide() Public Sub wWatcher_Resize() Inc iBusy If iBusy = 1 Then Message.Info("Das Hauptfenster " & sControlName & " hat seine Größe verändert!") Dec iBusy Stop Event End ' wWatcher_Resize() Public Sub wWatcher_Move() Inc iBusy If iBusy = 1 Then Message.Info("Das Hauptfenster " & sControlName & " hat seine Position geändert!") Dec iBusy Stop Event End ' wWatcher_Move() Public Sub btnFormMove_Click() FMain.X = FMain.X + 100 End ' btnFormMove_Click() Public Sub btnFormResize_Click() FMain.H += 50 FMain.W += (1.333 * 50) End ' btnFormResize_Click() Public Sub btnFormMin_Click() If FMain.Visible Then FMain.Minimized = True End ' btnFormMin_Click() Public Sub btnFormMax_Click() FMain.Maximized = True End ' btnFormMax_Click() Public Sub btnClose_Click() FMain.Close End ' btnClose_Click()
Abbildung 20.10.3.1: Projekt Demonstration Watcher
Hinweise:
Das vollständige Projekt Watcher finden Sie im Download-Bereich.