hi, hab hier ein Problem, Hätte gerne einen Button, der beim Klicken fr eine bestimmte Zeit blinkt und dann wieder in en Anfangszustand gesetzt wird. Ich weiß, dass es mit einem Timer Intervall gehen muss, aber irgendwie bekomm ich nicht ganz hin. Vlt hat ja einer einen Codeauschnitt wie es aussehen könnte. Gruß Agit
hi Sharping, es is mir auch klar, dass ich BackColor verwenden muss. nun es ist so. Wenn ich auf den Button klicke ist mein Code im Klick-Ereigniss. Hier ändere ich die Farben dann über eine schleife. Das Problem ist, dass die Oberfläche diese zwischenschritte nicht anzeigt, erst wenn die Routine verlasen wird ändert sich auch die Farbe des Buttons. Dabke fr die Hilfe. Gruß Agit
> Wenn ich auf den Button klicke ist mein Code im Klick-Ereigniss. > Hier ändere ich die Farben dann über eine schleife. > Das Problem ist, dass die Oberfläche diese zwischenschritte nicht > anzeigt, erst wenn die Routine verlasen wird ändert sich auch die Farbe > des Buttons. Klingt logisch... Die GUI wird wahrscheinlich erst aktualisiert, wenn die Klick-Routine abgearbeitet ist - da ist deine Schleife aber auch schon durchgelaufen... Du könntest der GUI mitteilen, dass sie sich aktualisieren soll, aber das halte ich irgendwie für unsauber... Ändere es um: - in der Klick-Routine startest du den Timer - Der Timer-Event verwaltet sich selbst, er hat die Anzahl der nötigen Schleifendurchläufe etc. - Jedesmal wenn der Timer-Event auftritt änderst du die Farbe und verlässt danach die Event-Routine wieder (d.h. du brauchst z.T. statische Variablen in der Event-Routine, damit du dir den Zustand merken kannst) - Wenn das letzte Ändern der Farbe erreicht ist stoppst du den Timer (Alternativ kannst du den Timer auch jedesmal in seiner Event-Routine neu starten, nur eben nach dem letzten Farbwechsel nicht). Ralf
Hier ein Codeausschnitt, der ein Label im Sekundentakt blinken lässt:
1 | public partial class MainWindow : Window |
2 | {
|
3 | DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); |
4 | |
5 | public MainWindow() |
6 | {
|
7 | InitializeComponent(); |
8 | dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); |
9 | dispatcherTimer.Interval = new TimeSpan(0, 0, 1); |
10 | }
|
11 | |
12 | private int z = 0; |
13 | |
14 | private void dispatcherTimer_Tick(object sender, EventArgs e) |
15 | {
|
16 | if (z % 2 == 0) |
17 | {
|
18 | label1.Background = Brushes.Blue; |
19 | dispatcherTimer.Start(); |
20 | }
|
21 | else
|
22 | {
|
23 | label1.Background = Brushes.Yellow; |
24 | dispatcherTimer.Start(); |
25 | }
|
26 | z++; |
27 | if (z >= 10) |
28 | {
|
29 | dispatcherTimer.Stop(); |
30 | z = 0; |
31 | }
|
32 | }
|
33 | |
34 | private void label1_MouseDown(object sender, MouseButtonEventArgs e) |
35 | {
|
36 | dispatcherTimer.Start(); |
37 | }
|
38 | }
|
hi, danke Ralf. c##### schrieb: > Hier ein Codeausschnitt wieso kann ich DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); bei mir nicht anwenden. Hier der Code
1 | public partial class DeviceMappingControl : UserControl |
2 | {
|
3 | private int z = 0; |
4 | private readonly FCatEntryList _factEntryListDevice; |
5 | private readonly FCatEntryList _factEntryListINIC; |
6 | System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); // Fehlermeldung: Der Typ- oder Namespacename "DispatcherTimer" ist im Namespace "System.Threading" nicht vorhanden. (Fehlt ein Assemblyverweis?) |
Ich hab kein System.Windows.Threading, sondern nur System.Threading. Benötige ich evt. ein Assembly`? Danke für die Hilfe. Gurß Agit
Ralf schrieb: > - in der Klick-Routine startest du den Timer Wie sieht das dann aus codemßig, muss ich nur ein eintervall setzen oder ? Gruß Agit
Agit A. schrieb: > Benötige ich evt. ein Assembly`? Habs hinbekommen, Benötigte das assembly WindwoBase. Gruß Agit
Ich hab's als WpfApplication ausprobiert und arbeite mit Visual C# 2010 Express. Microsoft .NET Framework Version 4.0.30319 RTMRel.
1 | using System.Windows.Threading; |
mit
1 | DispatcherTimer dispatcherTimer = new DispatcherTimer(); |
oder alternativ
1 | System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); |
funktionieren.
Mensch wenn man nicht weiß, wie etwas in C# bzw. .Net Framework zu benutzen ist, dann schaut man in die Doku. In dem Fall MSDN (ich nehme mal an, dass du die WinForms benutzt): http://msdn.microsoft.com/de-de/library/system.windows.forms.timer Da gibts sogar ein Beispiel.
oh main gott Kannst du echt nicht googeln oder was? http://www.morkalork.com/mork/article/47/How_to_use_the_timer_control_in_C
hi, Leute seid nicht immer so zickig :) @c##### danke funnktioniert wunderbar. Gruß Agit
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.