Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Строку состояния сделать Добавлено: 16.02.08 23:59  

Автор вопроса:  Zahar | Web-сайт: partnerka-ru.info
Я хочу в своей программе сделать строку состояния, которая бы отраждала текущее действие программы.
Бросил на форму Label1.
Написал программный код типа:

Label1.Caption="Программа выполняет действие №1"

<...програмный код...>

Label1.Caption="Программа выполняет действие №2"

<...програмный код...>

Label1.Caption="Программа выполняет действие №3"

<...програмный код...>

Label1.Caption="Программа завершила свою работу"

End


Но почему-то значения на Label1 либо меняются не своевременно, либо вообще не меняются. Хотя если запустить программу в пошаговом режиме, они меняются, как положено. такое ощущение, что Label1 просто не успевает сменить значение за ходом программы. Поясните, что я сделал не так, как сделать правильно.

Ответить

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

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


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 17.02.08 01:12
Label1.Caption="Программа выполняет действие №1"
Label1.Refresh
<...програмный код...>
...

Ответить

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #2
Добавлено: 17.02.08 01:15
А вообще есть славный контрол StatusBar =)

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #3 Добавлено: 17.02.08 09:38
Label1.Caption="Программа выполняет действие №1"
DoEvents
<...програмный код...>

Label1.Caption="Программа выполняет действие №2"
DoEvents
<...програмный код...>

Label1.Caption="Программа выполняет действие №3"
DoEvents
<...програмный код...>

Label1.Caption="Программа завершила свою работу"
DoEvents

Ответить

Номер ответа: 4
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #4
Добавлено: 17.02.08 10:10
Label1 не меняется, так как прога не вызывает перерисовку всего окна. Оператор DoEvents не только выполняет прорисовку окна, но еще пропускает события пользователя (можно сделать кнопку отмена) и замедляет работу программы в том месте, где он стоит. Но без него туго, поэтому его и юзают)))

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 17.02.08 13:27
замедляет работу программы в том месте, где он стоит

можешь объяснить почему?

Ответить

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #6
Добавлено: 17.02.08 14:40
потому что освобождается процессорное время для системных событий

Ответить

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



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #7
Добавлено: 17.02.08 16:57
Наверняка я скажу всем известный факт, но цикл с DoEvents можно ускорить при помощи АПИ

Private Declare Function GetQueueStatus Lib "user32.dll" (ByVal fuFlags As Long) As Long
Private Const QS_SENDMESSAGE As Long = &H40
Private Const QS_PAINT As Long = &H20
Private Const QS_TIMER As Long = &H10
Private Const QS_POSTMESSAGE As Long = &H8
Private Const QS_MOUSEBUTTON As Long = &H4
Private Const QS_MOUSEMOVE As Long = &H2
Private Const QS_HOTKEY As Long = &H80
Private Const QS_KEY As Long = &H1
Private Const QS_ALLINPUT As Long = (QS_SENDMESSAGE Or QS_PAINT Or QS_TIMER Or QS_POSTMESSAGE Or QS_MOUSEBUTTON Or QS_MOUSEMOVE Or QS_HOTKEY Or QS_KEY)

Public Sub DoEventsEx()
    If GetQueueStatus(QS_ALLINPUT) Then DoEvents
End Sub

Ответить

Страница: 1 |

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



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