www.mikrocontroller.net

Forum: PC-Programmierung Blinkender Button C#


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Leon E. (adiagi)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Sharping (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Na komm, das schaffst du ;-)
Stichwörter: Timer, Button.BackColor

Autor: Leon E. (adiagi)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Ralf (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
> 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

Autor: c##### (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hier ein Codeausschnitt, der ein Label im Sekundentakt blinken lässt:
   public partial class MainWindow : Window
    {
        DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();

        public MainWindow()
        {
            InitializeComponent();
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = new TimeSpan(0, 0, 1);           
        }

       private int z = 0;

       private void dispatcherTimer_Tick(object sender, EventArgs e)
       {
           if (z % 2 == 0)
           {
               label1.Background = Brushes.Blue;
               dispatcherTimer.Start();
           }
           else
           {
               label1.Background = Brushes.Yellow;
               dispatcherTimer.Start();
           }
           z++;
           if (z >= 10)
           {
               dispatcherTimer.Stop();
               z = 0;
           }
       }
       
        private void label1_MouseDown(object sender, MouseButtonEventArgs e)
        {
            dispatcherTimer.Start();
        }
    }

Autor: Leon E. (adiagi)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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
 public partial class DeviceMappingControl : UserControl
    {
        private int z = 0;
        private readonly FCatEntryList _factEntryListDevice;
        private readonly FCatEntryList _factEntryListINIC;
        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

Autor: Leon E. (adiagi)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Leon E. (adiagi)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Agit A. schrieb:
> Benötige ich evt. ein Assembly`?

Habs hinbekommen,
Benötigte das assembly WindwoBase.

Gruß
Agit

Autor: c##### (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ich hab's als WpfApplication ausprobiert und arbeite mit Visual C# 2010 
Express. Microsoft .NET Framework Version 4.0.30319 RTMRel.
using System.Windows.Threading;
mit
DispatcherTimer dispatcherTimer = new DispatcherTimer();

oder alternativ
System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();

funktionieren.

Autor: Christopher C. (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.win...

Da gibts sogar ein Beispiel.

Autor: Sebastian L. (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
oh main gott

Kannst du echt nicht googeln oder was?

http://www.morkalork.com/mork/article/47/How_to_us...

Autor: Leon E. (adiagi)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
hi,

Leute seid nicht immer so zickig :)

@c#####

danke funnktioniert wunderbar.

Gruß
Agit

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net