2012-07-25 80 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線程進入睡眠狀態。沒用。