2012-07-25 75 views
0

我开发一个应用程序,我需要具备以下条件的特定量可见:制作控制,仅持续在C#

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

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

此代码没有帮助的目的。什么是做到这一点的方法?

回答

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(); 

使用Thread.sleep()方法是从来没有的WinForms是一个好主意;改用计时器。

+1

使用匿名方法+1。 – Ria 2012-07-25 11:38:38

+0

谢谢..会尝试它,让你知道它是否工作 – Cdeez 2012-07-25 11:41:42

+0

@丹尼尔:工作。简单而好看。谢谢。你能解释我代码中的第三行吗? – Cdeez 2012-07-25 11:45:41

2

Create一个timer以3S为Interval,启动它,在你的计时器滴答事件设置Visiblefalse。另外不要忘记停止计时器。

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

+1

你不需要明确地停止定时器,只要确保它的'AutoReset'属性设置为'false' – paul 2012-07-25 11:34:31

+1

@paul System.Windows.Forms.Timer类没有这样的属性(它只存在为System.Timers.Timer)。 – ken2k 2012-07-25 11:35:49

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(); 
} 
+0

Thread.Sleep在UI线程中....? – ken2k 2012-07-25 11:34:43

+0

好点,那只是OPs代码。 – DaveDev 2012-07-25 11:35:32

1

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