2014-10-19 2 views
0

У меня есть некоторые проблемы с ToolStripStatusLabel в приложении Winforms. Для того, чтобы лучше объяснить, у меня есть некоторый код здесь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. Оба элемента управления получают «Done!». текст после выполнения функции listAllFiles.

Но есть ли что-то особенное, что я должен делать на ToolStripStatusLabel?

+0

Понимания, когда обновления пользовательского интерфейса происходят очень, очень важно. Это не может произойти, когда поток пользовательского интерфейса отключен в лесу, перечисляя файлы. Пользовательский интерфейс тоже не реагирует, клики не работают. Добавьте 'bottomLbl.Update();' для быстрого исправления. Что-то вроде BackgroundWorker - это реальное решение. –

ответ

1

Вы должны обновления формы перед вызовом функции

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 не обновляется. Но это действительно работает, освежая! –

+0

@ DanielJørgensen Каждый раз, когда вы вызываете * bottomLbl.Text *, это как отправка сообщения * paint * через * invalidate *. Но сообщения с краской находятся в нижней части списка сообщений иерархии. Это означает, что даже если вы отправляете 20 сообщений краски в один вызов функции (который является ответом на другое сообщение, например, нажатие кнопки), обрабатывается только одна (последняя) в конце функции. Для получения дополнительной информации поиск * invalidate vs refresh * –

+0

@ DanielJørgensen Теперь тот факт, что * this.Text * имеет немедленный эффект, - это то, чего я не знал. Возможно, система отправляет сообщение с краской и помещает его в начало списка обрабатываемых сообщений, как * refresh *, но только для родительской формы. –