ラベルを数秒だけ表示したいです

タグの編集
投稿者 かーらー  (学生) 投稿日時 2023/5/11 10:09:03
Visual Studio 2008 .NET Framework 3.5のC#を使用しています


画面に入力された内容をチェックする関数があり、それがtrueならラベルの文字をOKにして1秒表示、falseならラベルの文字をNGにして1秒表示ということをしたいです。

現在、ツールボックスのデバイスコンポーネントからTimerをフォームに配置し
 
Loadイベントに
TimerOKNG.Interval = 1000;

画面内容入力後のイベントに

                        if (chk())
                        {
                            lbl_OKNG.Text = "OK";
                            lbl_OKNG.Visible = true;
                        }
                        else
                        {
                            lbl_OKNG.Text = "NG";
                            lbl_OKNG.Visible = true;
                        }

                        // 時間経過でラベル消す
                        //TimerOKNG.Interval = timerClose;
                        TimerOKNG.Enabled = true;

と記載し、Tickイベントも以下の用に記載しています

        private void TimerOKNG_Tick(object sender, EventArgs e)
        {
            lbl_OKNG.Visible = false;
            TimerOKNG.Enabled = false;
        }


以上のようにしていますが、ラベルが表示されたままになります。
どこがいけないのでしょうか?ご教授よろしくお願いいたします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/5/11 10:52:56
> Visual Studio 2008 .NET Framework 3.5のC#を使用しています
お゙ぉぅ…。


> それがtrueならラベルの文字をOKにして1秒表示、falseならラベルの文字をNGにして1秒表示ということをしたいです。
Windows Forms プロジェクトという事で良いでしょうか?


> 画面に入力された内容をチェックする関数があり、
とりあえず検証用に
 bool chk() { return this.checkBox1.Checked; }
を用意してみました。


> 画面内容入力後のイベントに
検証用に、button1_Click 内に記述してみました。


> 以上のようにしていますが、ラベルが表示されたままになります。
当方の Visual Studio 2008 環境では 1 秒後に消えました。


> どこがいけないのでしょうか?ご教授よろしくお願いいたします。
教授 / 教示 の取り違えはさておき、イベント ハンドラの割り当て漏れでは無いでしょうか。

デザイン画面で、TimerOKNG のプロパティウィンドウで ⚡ アイコンをクリックし、
Tick イベントに TimerOKNG_Tick が割り当てられているかを再確認してみてください。


> TimerOKNG.Interval = 1000;
C# の場合、コントロールやコンポーネントを貼った場合、
既定の名前は timer1 のように小文字表記になりますよね。
実際、Label も lbl_OKNG という名前にしているようですが、
Tiemr だけは大文字表記にしているのですか?

命名ルールとして、Pascal 規約なのか Camel 規約なのかを統一しておいた方が良いと思いますよ。
投稿者 かーらー  (学生) 投稿日時 2023/5/11 11:08:30
ご回答ありがとうございます。

>Windows Forms プロジェクトという事で良いでしょうか?
そうです。


>当方の Visual Studio 2008 環境では 1 秒後に消えました。
検証ありがとうございます。

>教授 / 教示 の取り違えはさておき、イベント ハンドラの割り当て漏れでは無いでしょうか。
>デザイン画面で、TimerOKNG のプロパティウィンドウで ⚡ アイコンをクリックし、
>Tick イベントに TimerOKNG_Tick が割り当てられているかを再確認してみてください。

失礼いたしました。。割り当てられているか確認したところ、プロパティの部分には記載されていました。
一応、イベントを削除し、もう一度作成し動作確認したところ無事に消えました!


>C# の場合、コントロールやコンポーネントを貼った場合、
>既定の名前は timer1 のように小文字表記になりますよね。>
>実際、Label も lbl_OKNG という名前にしているようですが、
>Tiemr だけは大文字表記にしているのですか?

確かにおかしいと思い、小文字にいたしました。アドバイスありがとうございます。