Laden...

Timer funktioniert nicht

Erstellt von kstanger vor einem Jahr Letzter Beitrag vor einem Jahr 310 Views
K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr
Timer funktioniert nicht

Hallo allerseits,
ich bin blutiger Anfänger, habe es aber schon geschafft, ein Formular zu erzeugen. Dort sind einige Testboxen und einige Buttons. Wenn ich nun einen Button ButtonNeuSchreiben betätige, soll dieser für 2 Sekunden grün sein und dann wieder normal. Mein Projekt läuft mit .NET 4.8.


        public void ButtonNeuSchreiben_Click(object sender, EventArgs e)
        {
            if (TextBoxEingabe.Text != "")
            {
                File.WriteAllText(dateiName, TextBoxEingabe.Text);
                T1.Start();
                ButtonNeuSchreiben.BackColor = Color.FromArgb(196, 255, 196);
            } else
            {
                ButtonNeuSchreiben.BackColor = Color.FromArgb(255, 196, 196);
            }
        }

Den Timer habe ich vorher mit


private static Timer T1;

definiert und im Konstruktor mit


            T1 = new Timer();
            T1.Interval = 2000;

generiert.

Die Eventbehandlung lautet


        public static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
        {
            T1.Stop();
            ButtonNeuSchreiben.BackColor = SystemColors.Control;
        }

Irgendwie funktioniert das aber nicht. Ich habe die Meldung, dass ButtonNeuSchreiben nicht static ist. Warum muss das static sein? Warum ist der Timer static? Ich habe dann mal den Button static vereinbart. Dann habe ich keine Fehlermeldung, funktioniert aber trotzdem nicht.

Vielleicht kann mir jemand helfen?

Viele Grüße
Karl

Karl Stanger
4.942 Beiträge seit 2008
vor einem Jahr

Hallo und willkommen,

du solltest sowohl den Timer als auch dessen Ereignismethode nicht static machen, so daß du normal auf Member der umgebenen Klasse zugreifen kannst.

Dann wundert mich, daß du anscheinend den System.Timers.Timer anstatt den System.Windows.Forms.Timer benutzt (da du ja Windows Forms zu benutzen scheinst)?!

M
368 Beiträge seit 2006
vor einem Jahr

static

Weiterhin: [FAQ] Für das nicht statische Feld, die Methode oder die Eigenschaft "X" ist ein Objektverweis erf. Kurzfassung: statische Methoden, Variablen,... werden zwar in einer Klasse definiert (weil die C#-Formalien es verlangen) haben mit der Klasse selbst aber (idR) nichts zu tun.

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr

Es funktioniert - vielen Dank für die Hilfe.
So habe ich es jetzt gemacht:
Vereinbart wurde der Timer mit


private Timer T1;

Der Konstruktor beinhaltet jetzt


T1 = new System.Windows.Forms.Timer();
T1.Tick += new EventHandler(T1_Tick);
T1.Interval = 2000;

und der Event-Handler ist


        public void T1_Tick(object sender, EventArgs e)
        {
            T1.Stop();
            ButtonNeuSchreiben.BackColor = SystemColors.Control;
        }

Nochmals Danke!

Karl Stanger
4.942 Beiträge seit 2008
vor einem Jahr

Als Info noch: den Windows.Forms.Timer gibt es auch als Komponente in der Toolbox, so daß man diesen auch im Designer auf eine Form (oder UserControl) platzieren und somit dessen Eigenschaften (und Ereignisse) direkt einstellen kann.