0

次の要件が必要なアプリケーションを開発しています。

フォームにボタンとラベル (最初は可視性が false に設定されている) があり、ユーザーがボタンをクリックすると、ボタンのクリックでラベルに割り当てたテキストと共にラベルが表示されるはずです。ただし、このラベルはしばらくの間、たとえば 3 秒間だけ表示され、その後自動的に非表示になります。このために私が与えた場合:

private void button1_Click(object sender, EventArgs e)
    {
     label1.Visible=true;
     label1.Text= "Magic";
     Thread.Sleep(3000);
     label1.Visible=false;
    }

このコードは目的には役立ちません。それを行うためのアプローチは何ですか?

4

4 に答える 4

5

メソッドの最後の 2 行を次のように置き換えてみてください。

System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 3000;
timer.Tick += (source, e) => {label1.Visible = false; timer.Stop();};
timer.Start();

Thread.Sleep() を使用することは、WinForms では決して良い考えではありません。代わりにタイマーを使用してください。

于 2012-07-25T11:34:31.737 に答える
2

Createとして 3 秒のタイマーIntervalを開始し、タイマー Tick イベントで に設定Visibleします。falseまた、タイマーを停止することを忘れないでください。

UI スレッドを呼び出さないThread.Sleepでください。スリープ中に UI スレッドがメッセージ (ユーザーのクリック...) を受け入れないため、アプリケーションはブロックされます。

于 2012-07-25T11:32:53.790 に答える
2
// create a global _timer object
static Timer _timer; // From System.Timers

private void button1_Click(object sender, EventArgs e)
{

    label1.Text = "Magic";
    // Thread.Sleep(3000); // don't do Thread.Sleep()!
    label1.Visible = false;

    Start();
}


static void Start()
{
    label1.Visible = true;


    _timer = new Timer(3000); // Set up the timer for 3 seconds

    _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
    _timer.Enabled = true; // Enable it

}
static void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
    label1.Visible = false;
    _timer.Stop();
}
于 2012-07-25T11:32:57.427 に答える
1

タイマー、おそらく Windows.Forms.Timer を使用します。必要な場合と不要な場合に、有効化および無効化して遊ぶ必要がある場合があります。現在の方法は役に立ちません。メインの UI スレッドをスリープ状態にしているためです。役に立たない。

于 2012-07-25T11:34:14.857 に答える