Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Обновление Label3.Caption в цикле. Добавлено: 11.08.08 06:59  

Автор вопроса:  Dima78
Есть форма. По нажатию кнопки запускается код, который проводит некие операции. Все работает как надо. Захотел сделать прогресс-бар и под ним надпись, типа, "Обработана строка 1 из 1000". Прогресс-бар работает, но Label не виден. Т.е. он обновляется, если вставить msgbox после каждого MyExportForm.Label3.Caption = "Обработана строка 1 из 1000", но на экране виден, что msgbox подвигать поверх формы. Такое ощущение, что отрисовка не идет во время итераций. Вот пример кода:
Public Sub CommandButton1_Click()
    For a = 1 To 100000 Step 1
        UserForm1.TextBox1.Value = a
    Next a
End Sub


Так вот здесь я не увижу в поле TextBox1 значений 1,2,3,4 .....99999. Но увижу 100000 в конце цикла. Как можно сделать так, чтобы видеть текст в момент изменения цикла?

Спасибо.

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #1 Добавлено: 11.08.08 07:10
Я обычно ставлю Label на форму с прогресс-баром, отображаю ее (Show), затем в нужном месте пишу в Caption что нужно и затем перерисовываю форму через Repaint. Все работает. Примерно вот так:
For a = 1 To 100000
    UserForm1.Label.Caption = a
Next a

Ответить

Номер ответа: 2
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #2 Добавлено: 11.08.08 07:10
For a = 1 To 100000
    UserForm1.Label.Caption = a
    UserForm1.Repaint
Next a

Ответить

Номер ответа: 3
Автор ответа:
 Dima78



Вопросов: 2
Ответов: 4
 Профиль | | #3 Добавлено: 11.08.08 07:35
О, супер, все работает. Спасибо!!

Ответить

Номер ответа: 4
Автор ответа:
 astoro



ICQ: 649109 

Вопросов: 31
Ответов: 391
 Профиль | | #4 Добавлено: 11.08.08 12:52
For a = 1 To 100000
    UserForm1.Label.Caption = a
    ;DoEvents
Next a

лучше так ИМХО

Ответить

Номер ответа: 5
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #5 Добавлено: 11.08.08 13:00
Тоже можно. Просто я как правило все перерисовки/обновления экрана и т. д. отключаю перед расчетом. А оставляю только эту маленькую форму обновлятся. Чтоб пользователь не дергался нажать что-либо. :-)

Ответить

Номер ответа: 6
Автор ответа:
 astoro



ICQ: 649109 

Вопросов: 31
Ответов: 391
 Профиль | | #6 Добавлено: 11.08.08 13:57
пользователь может захотеть переключится на идущее на фоне любимое порно.
или там просто посерфить инет.

а у него будет все тормозить нещадно.

Ответить

Номер ответа: 7
Автор ответа:
 Dima78



Вопросов: 2
Ответов: 4
 Профиль | | #7 Добавлено: 11.08.08 14:52
Прогресс-бар в этом случае (а он тоже обновляется в этом же цикле вместе с Label) выглядит как синяя полоска, т.е. не в утопленном виде с границами, а просто полоса. Как будто ProgressBar1.Appearance = ccFlat, а не ProgressBar1.Appearance = cc3D. Да и код выполняется 2 секунды, порно не успеть посмотреть :))

Ответить

Номер ответа: 8
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #8 Добавлено: 12.08.08 08:21
порно

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам