J'essaie d'implémenter un système d'avertissement lorsqu'un utilisateur essaie de faire une action illégale dans mon formulaire. L'idée est d'appeler la méthode StatusBarFade
, donnez-lui le paramètre qu'il doit écrire, que d'avoir cette méthode afficher le texte, le faire clignoter en changeant sa couleur pendant une seconde et demi, puis rester une seconde et demie, après quoi le le texte disparaîtra.Texte clignotant dans la barre d'état
Le clignotement fonctionne une fois sur deux, tandis que le texte disparaît normalement. S'il vous plaît noter que je sais que ce code est assez salissant et il ya sûrement une meilleure façon de le faire, mais comme je ne sais pas exactement comment les délégués travaillent, je ne sais pas comment les utiliser correctement. J'espère que quelqu'un sera en mesure d'expliquer ce que je fais mal. Quoi qu'il en soit, après quelques tests, j'ai réalisé qu'il était préférable d'avoir deux minuteurs. Le problème est que ce code fonctionne toutes les deux fois.
private Timer timer = new System.Timers.Timer();
private Timer timerColor = new System.Timers.Timer();
private void StatusBarFade(string ispis)
{
statusBar1AS2.Content = ispis;
int i = 0;
timerColor.Interval = 100;
timerColor.AutoReset = true;
timerColor.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e)
{
this.Dispatcher.BeginInvoke(new Action(() =>
{
++i;
if (statusBar1AS2.Foreground == Brushes.Black)
statusBar1AS2.Foreground = Brushes.Gold;
else
statusBar1AS2.Foreground = Brushes.Black;
if (i > 15)
{
statusBar1AS2.Foreground = Brushes.Black;
i = 0;
timerColor.Stop();
}
}));
};
timerColor.Start();
timer.Interval = 3000;
timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e)
{
timer.Stop();
this.Dispatcher.BeginInvoke(new Action(() => { statusBar1AS2.Content = ""; }));
};
timer.Start();
}
Pour autant que je comprends les délégués, je ne devrais pas être en ajoutant le même délégué à l'événement timer.Elapsed chaque fois que le texte est modifié, mais une seule fois, dans le constructeur, par exemple. Le problème est que je ne sais pas comment utiliser le compteur i
comme je l'ai fait dans le code.
Alors je voudrais créer l'animation le constructeur, puis modifiez la propriété statusBar.Foreground dans la méthode StatusBarFade? Pour autant que je puisse voir, cela clignotera le texte pendant une seconde et demie, et puis enlèvera le texte, n'est-ce pas? J'ai besoin que le texte clignote pendant 1,5 secondes, puis reste pendant X (probablement 3) secondes avant d'être retiré. Pourrais-je créer une animation composite, ou devrais-je simplement utiliser cette animation en combinaison avec la minuterie utilisée pour supprimer le texte dans le code ci-dessus? – user2352164
Voir mon edit pour une suggestion de comment écrire votre méthode. – Clemens