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
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)?!
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 😉
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!
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.