2014-10-19 41 views
0

Im在Winforms應用程序中的ToolStripStatusLabel有一些問題。爲了更好地解釋我這裏有ToolStripStatusLabel行爲不像其他類型的控件

bottomLbl.Text = "Adding file(s) to list..."; 
this.Text = "Adding file(s) to list..."; 

listAllFiles(carrier, type, chkListBox, withDestSystem, listBox, cmbBox); 

bottomLbl.Text = "Done!"; 
this.Text = "Done"; 

一些代碼是什麼我不明白是,this.Text不會改變的「添加文件...」,而不是bottomLbl即使我將其設置爲this.text之前這樣做。兩個控件都獲得了「完成!」 textAllFiles函數運行後的文本。

但是在ToolStripStatusLabel上有什麼特別的事情要做嗎?

+0

認識之前需要刷新形式。當你的UI線程關閉時,它不會發生,列出文件。您的用戶界面無法響應,點擊不起作用。添加'bottomLbl.Update();'快速修復。像BackgroundWorker是一個真正的修復。 – 2014-10-19 03:56:10

回答

1

你當發生UI更新是非常非常重要的調用函數

bottomLbl.Text = "Adding file(s) to list..."; 
this.Text = "Adding file(s) to list..."; 
this.Refresh(); 

listAllFiles(carrier, type, chkListBox, withDestSystem, listBox, cmbBox); 

bottomLbl.Text = "Done!"; 
this.Text = "Done"; 
+0

謝謝!我只是不明白爲什麼這是第一次需要(添加文件)而不是(完成),以及爲什麼this.text更新而不刷新,而bottomLbl.Text不更新。但它確實有效,令人耳目一新! – 2014-10-19 07:59:35

+0

@DanielJørgensen每次打電話* bottomLbl.Text *就像通過* invalidate *發送* paint *消息。但油漆消息位於消息的層次結構列表的底部。這意味着,即使您在單個函數調用中發送了20個繪圖消息(這是對另一個消息的響應,例如單擊按鈕),只有一個在函數結束時處理(最後一個)。欲瞭解更多信息,搜索* invalidate vs refresh * – 2014-10-19 08:42:49

+0

@DanielJørgensen現在,* this.Text *立即生效的事實是我不知道的事情。也許系統確實發送了一條繪畫消息,並將其放置在待處理消息列表的開始處,就像* refresh *一樣,但僅限於父窗體。 – 2014-10-19 08:46:08