2014-10-19 19 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