Как разрешить обновление графического интерфейса? - PullRequest
0 голосов
/ 17 июня 2010

У меня есть программа VBA для загрузки вложений из почтового сообщения.

Я запускаю макрос (то есть «sub» в модуле), который выполняет «Form.Show» для запуска пользовательской формы. На пользовательской форме есть кнопка, чтобы начать загрузку. Модуль загрузки находится в коде модуля, а не в коде пользовательской формы.

Вот код, который я использую для кнопки:

Private Sub BTN_Download_Click()
    Me.MousePointer = fmMousePointerHourGlass
    Me.BTN_Download.Enabled = False
    Utils.DownloadAttachments
    Me.BTN_Download.Enabled = True
    Me.MousePointer = fmMousePointerDefault
End Sub

Я пытаюсь представить пользователю хороший пользовательский интерфейс: временно отключить кнопку и показать песочные часы, когда операция находится в действии, а затем снова включить кнопку и восстановить указатель мыши по умолчанию после завершения.

Что происходит, GUI перестает отвечать на запросы, кнопка никогда не отключается, и я не вижу указатель песочных часов.

Я попытался переместить код GUI в Модуль (MyForm.MousePointer = ...). Я попытался создать два дополнительных Sub, «Busy» и «UnBusy», и вызвать его непосредственно из Sub выше - что работает немного лучше, но все же есть задержка, прежде чем GUI будет выглядеть «Busy» для пользователя.

Есть ли способ обеспечить обновление графического интерфейса?

1 Ответ

0 голосов
/ 29 июня 2010

Найден ответ: «DoEvents» - фактически в статье ниже говорится о том, что «DoEvents» является более старым способом передачи управления обратно в графический интерфейс для обновления в более старых версиях VB - похоже, хорошо работает с VBA, так как хорошо.

http://msdn.microsoft.com/en-us/library/aa719109%28VS.71%29.aspx
...