Quote:
Originally Posted by stotterer09
Ein Attribut ist eine Eigenschaft einer Klasse:
gehen wir davon aus wir haben eine Klasse Mensch dann ist ein Attribut von dem das Geschlecht
In meinem Fall ist der Timer ein Attribut der Klasse Form1 -> Man kann in der ganzen Klasse drauf zugreifen
In deinem Fall ist der Timer nur Lokal in der Methode -> Man kann eigentlich nur in der Methode drauf zugreifen
Somit haben beide Codes ihre schwächen
Bei meinem Code muss man vorher wissen wv man haben will
das hab ich dazu geschrieben um zu zeigen dass mein Code nicht super toll ist sondern nur eine Art es möglichst einfach zu machen
|
Stimmt leider nicht. Ein Attribut ist sowas hier:
Code:
<Conditional("DEBUG")>
Sub TraceMethod()
End Sub
Du redest von Membern (oder auch Variablen) der Klasse.
Außerdem ist mein Timer zwar nur Lokal, aber
Code:
Container.Add(timer)
fügt ihn den Controls hinzu, womit er sogar disposed wird, was bei deinem nicht der Fall ist.
Man kann auf jeden meiner Timer zugreifen.
Code:
For Each currentTimer As Timer In (From item As Object In Container.Components Where item Is timer).Cast(Of Timer)()
'Oder was auch immer damit gemacht werden soll.
MessageBox.Show(currentTimer.Interval.ToString())
Next
Und du übergibst deinem Timer keine Funktion für das Tick Event wodurch er nichst machen wird.
Wenn man nicht Container benutzen möchte (oder kann lol. mir ist auch grade aufgefallen, dass der bei mir null ist. kp warum) kann man das ganze auch so machen:
Code:
Public Class Form1
Private ReadOnly _allTimers As List(Of Timer) = New List(Of Timer)()
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim timer As New System.Windows.Forms.Timer()
AddHandler timer.Tick, AddressOf Timer_Tick
timer.Interval = 1337
timer.Start()
_allTimers.Add(timer)
End Sub
Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)
End Sub
End Class
So kann man dann durch alle Timer loopen:
Code:
For Each currentTimer As Timer In _allTimers
'Mach was damit.
Next
Falls der Topic Ersteller nicht nur Timer, sondern auch andere Objekte zur Laufzeit erstellen möchte, ist hier ein kleines Beispiel, wie man das lösen könnte ohne den Container zu nutzen:
Code:
Option Strict Off
Public Class Form1
Private ReadOnly _allComponents As List(Of Object) = New List(Of Object)()
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim tmpTimer As New System.Windows.Forms.Timer()
AddHandler tmpTimer.Tick, AddressOf Timer_Tick
tmpTimer.Interval = 1337
tmpTimer.Start()
_allComponents.Add(tmpTimer)
Dim nurEinBeispielFürEinAnderesControl As New TextBox()
nurEinBeispielFürEinAnderesControl.Text = "Hallo :)"
_allComponents.Add(nurEinBeispielFürEinAnderesControl)
End Sub
Private Sub ShowIntervalOfAllTimers()
For Each currentTimer As Timer In _allComponents.OfType(Of Timer)()
MessageBox.Show(currentTimer.Interval.ToString())
Next
End Sub
Private Sub ShowTextOfAllTextBoxes()
For Each currentTextBox As TextBox In _allComponents.OfType(Of TextBox)()
MessageBox.Show(currentTextBox.Text)
Next
End Sub
Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)
End Sub
End Class
Edit: @Chillout dann nutz halt die Version mit der Liste. Bei mir ist der auch null. Hatte den Code halt vorher nicht getestet, weil ich davon ausgegangen bin, dass der Container dafür da ist alle Controls zu speichern.