| |
VB.NET - Ein- und UmsteigerTimer in einer eigenen Klasse verwenden | | | Autor: Earny | Datum: 29.03.15 11:18 |
| Ich benötige in einer eigenen Klasse die Funktionalität eines VB-Timers, wie er in einem Formular zur Verfügung steht. Das scheint aber in einer Nicht-Formular-Klasse nicht so einfach zu sein.
Ich wäre für ein Beispiel dankbar. Das Problem beginnt schon mit der Deklaration.
Ich habe es mit dem System.Timers.Timer() versucht. Ich kann zwar dem Timer ein Interval zuweisen und ihn starten und stoppen, die eigentliche Timer-Prozedur, die bestimmte Anweisungen zyklisch ausführen soll, bekomme ich nicht fehlerfrei hin. Entweder gibt es Fehler im Timer-Prozedurenkopf oder ich kann innerhalb der Timer-Prozedur nicht auf die Eigenschaften (lokale Variablen) meiner Klasse zugreifen.
Ich muss dazusagen, dass ich sehr wenig Erfahrung mit der Programmierung in Nicht-Formular-Klassen habe und deshalb für ein konkretes Beispiel sehr dankbar wäre.
| |
Re: Timer in einer eigenen Klasse verwenden | | | Autor: Kuno60 | Datum: 29.03.15 14:18 |
| Hallo,
Der "System.Timers.Timer" ist ein nicht threadsicherer Timer. Im Elapsed-Ereignis kannst du nicht direkt auf Steuerelemente zugreifen.
Verwende "Invoke" um auf Steuerelemente zuzugreifen oder weise der Eigenschaft "SynchronizingObject" ein Formular zu, mit dem der Timer synchronisiert wird.
Es gibt aber auch noch den normalen "System.Windows.Forms.Timer".
| |
Re: Timer in einer eigenen Klasse verwenden | | | Autor: Manfred X | Datum: 29.03.15 17:14 |
| Ganz normal ....
Public Class clsTimerDemo
'Timer erstellen und starten
Dim WithEvents tim As New System.Windows.Forms.Timer _
With {.Interval = 1000, .Enabled = True}
Dim _myValue As Integer
Public Event Valuechanged(ByVal sender As Object, e As EventArgs)
Public ReadOnly Property myValue As Integer
Get
'Für externe Abfrage des Wertes
Return _myValue
End Get
End Property
Private WriteOnly Property ivalue As Integer
Set(value As Integer)
If Not value = _myValue Then
'Für internes Setzen des Wertes incl. Benachrichtigung
_myValue = value
RaiseEvent Valuechanged(Me, EventArgs.Empty)
End If
End Set
End Property
Private Sub tim_Tick(sender As Object, e As System.EventArgs) Handles _
tim.Tick
'Zuweisung per Property
ivalue = _myValue + 1
End Sub
End Class Anwendung einer Instanz der Klasse in einer Form:
Dim WithEvents myTimerClass As New clsTimerDemo
Private Sub myTimerClass_Valuechanged(sender As Object, _
e As System.EventArgs) Handles myTimerClass.Valuechanged
Me.Text = myTimerClass.myValue.ToString
End Sub | |
Re: Timer in einer eigenen Klasse verwenden | | | Autor: Earny | Datum: 29.03.15 19:35 |
| Hallo Manfred, besten Dank für das Beispiel.
Ich habe jetzt zumindest in meiner Klasse den Einsatz des Timers hinbekommen. Es ist der Windows.Forms.Timer, der mit "WithEvents" deklariert wird.
Allerdings frage ich mich jetzt bezüglich der Sinnhaftigkeit der Vorgehensweise. Ob die Übersichtlichkeit des Gesamtprogramms tatsächlich zunimmt, wenn ich einige Sache in die Klasse auslagere und dort in der Timer-Prozedur lese oder schreibe, muss ich mir nochmal durch den Kopf gehen lassen. | |
Re: Timer in einer eigenen Klasse verwenden | | | Autor: Manfred X | Datum: 29.03.15 21:47 |
| Der Gedanke des "Auslagerns einiger Sachen" führt bei Konzipierung
der Struktur eines Programms leicht in die Irre.
Günstiger ist es, in Klassen zu denken; d.h. die Funktionalität des
Programms in Teilaufgaben zu gliedern und für jede diese Teilaufgaben
jeweils eine Klasse (oder mehrere verschachtelte Klassen) zu entwerfen -
das kann z.B. ein Usercontrol, ein Dialog-Formular,
eine bindungsfähige oder serialisierbare Datenklasse sein.
Relevant ist dabei vor allem die Trennung von Datenebene und Benutzer-Oberfläche.
| |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|