0

現在の時刻に応じてラベルの Text プロパティを変更するにはどうすればよいですか?

ありがとうございました

明確にするために:

ラベルのテキストを午前 10 時から午後 5 時まで開いて読み、午後 5 時 1 分から午前 9 時 59 分まで閉じて読みたいと思います。

4

4 に答える 4

3

タイマーを使用します。Timer.Tick ハンドラーで、DateTime.Now に基づく単純な if/else ステートメントを使用して、ラベルの Text プロパティを変更します。

于 2012-05-10T17:57:04.910 に答える
3
int hour = DateTime.Now.Hour;

if (hour >= 10 && hour < 17) 
    //Open 10:00am through 4:59pm
    LabelStatus.Text = "Open";
else
    //Closed 5:00pm through 9:59am
    LabelStatus.Text = "Closed";
于 2012-05-10T18:06:05.887 に答える
1

以下は、ラベルを更新する別のスレッドを使用してこれを行う方法です。このようにして、スレッドはバックグラウンドで実行され、ラベルが正しいステータスにあることを常にチェックします。フォームを閉じるときは、必ず Thread.Abort() を使用して、常にスローされると思われる例外をキャッチするか、while ループの条件としてフラグを追加し、フラグを下げてスレッドを停止してください。スレッド。

他のオブジェクトがラベルにアクセスしない限り、スレッドのどの部分もロックする必要はありません。

    public delegate void DelLabelText(Label l, string s);
    public DelLabelText delLabelText;

    public Form1()
    {
        InitializeComponent();

        delLabelText = Label_Text;

        // Initialize text
        lblOpenStatus.Text = "Closed";

        // Create and start thread
        Thread threadUpdateLabel = new Thread(UpdateLabel_Threaded);
        threadUpdateLabel.Start();
    }

    // Thread function that constantly checks if the text is correct
    public void UpdateLabel_Threaded()
    {
        while (true)
        {
            Thread.Sleep(5000);

            // 24 hour clock so 17 means 5
            if ((DateTime.Now.Hour >= 10 && DateTime.Now.Hour < 17) || (DateTime.Now.Hour == 17 && DateTime.Now.Minute == 0 && DateTime.Now.Second == 0))
            {
                if (lblOpenStatus.Text.ToLower() == "closed")
                {
                    Label_Text(lblOpenStatus, "Open");
                }
            }
            else
            {
                if (lblOpenStatus.Text.ToLower() == "open")
                {
                    Label_Text(lblOpenStatus, "Closed");
                }
            }
        }
    }

    // Set the text using invoke, because text is changed outside of main thread
    public void Label_Text(Label label, string text)
    {
        if (label.InvokeRequired)
        {
            label.Invoke(delLabelText, new object[] { label, text });
        }
        else
        {
            label.Text = text;
        }
    }
于 2012-05-10T20:36:25.410 に答える
0

フォームにタイマーを追加し、その間隔を 1000 ミリ秒に設定します。

ティックごとにタイマーによって更新される現在の時間のミリ秒を持つ非表示の TextBox を宣言します。

Textbox の TextBox.TextChanged イベントで、ミリ秒を時間に変換する関数を追加します...

次の方法は、タイマーを追加し、間隔を 1 ミリ秒に設定することです...

そこから時間を更新..

次のメソッドは、BackgroundWorker を追加し、それをタイマーとして使用して時間を更新することです...

上記の方法のいずれかが有用であると思われる場合は、コメントしてください。コードを投稿します。:)

于 2012-05-10T17:55:17.780 に答える