使控件仅在c#中的特定时间内可见

时间:2012-07-25 11:28:49

标签: c# controls

我正在开发一个应用程序,我需要以下要求:

假设我的表单中有一个按钮和一个标签(最初的可见性设置为false),并且用户点击了按钮,那么标签应该显示一些文本,我在按钮点击中分配给标签。但是这个标签应该只显示一段时间,比如大约3秒,然后它应该自动隐藏。如果我给了这个:

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

此代码无助于此目的。这样做的方法是什么?

4 个答案:

答案 0 :(得分:5)

尝试用以下方法替换方法的最后两行:

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

在WinForms中使用Thread.Sleep()绝不是一个好主意;改为使用计时器。

答案 1 :(得分:2)

Create一个timer,其中3分为Interval,启动它,并在计时器Tick事件中将Visible设置为false。另外别忘了停止计时器。

从不在您的UI线程中调用Thread.Sleep:应用程序将被阻止,因为UI线程在睡眠时不会接受消息(用户点击...)。

答案 2 :(得分: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();
}

答案 3 :(得分:1)

使用Timer,也许是Windows.Forms.Timer。您可能需要在需要时启用和禁用它,而不是必需的。你当前的方式没有帮助,因为你让主要的UI线程进入睡眠状态。没用。