ユーザーが自分のフォームで違法なアクションを実行しようとしたときに、警告システムを実装しようとしています。アイデアは、メソッドを呼び出しStatusBarFade
、書き込む必要があるパラメーターを指定して、そのメソッドにテキストを表示させ、1 秒半色を変更して点滅させ、さらに 1 秒半静止させ、その後テキストを表示することです。消えるだろう。
点滅は1回おきに機能しますが、テキストは通常どおり消えます。
私はこのコードが非常に厄介であり、それを行うためのより良い方法があることを知っていますが、デリゲートがどのように機能するかを正確に知らないため、それらを適切に利用する方法がわかりません. うまくいけば、誰かが私が間違っていることを説明できるでしょう。とにかく、いくつかのテストの後、2 つのタイマーを用意するのが最善であることに気付きました。問題は、このコードが 1 回おきに機能することです。
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();
}
私がデリゲートを理解している限り、テキストが変更されるたびに同じデリゲートを timer.Elapsed イベントに追加するのではなく、たとえばコンストラクターで一度だけ追加する必要があります。問題は、コードで行った方法でカウンターを使用する方法がわからないことi
です。