Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Пока Excel считает, как сделать, чтобы кнопки рабо


Автор: price 3.6.2008, 05:19
Здравствуйте всем. Подскажите, пожалуйста, как сделать, чтобы текст на кнопке менялся раз в секунду(чтобы было видно, что текст меняется) (предположим, циферки бежали на кнопке 1,2,3,4...), пока на эту кнопку не нажмёшь.


Вот 10% моего кода.


Private Sub CommandButton1_Click()
    If run25 = True Then
        CommandButton1.Caption = "stopped"
        run25 = False
        Else
            While (True)
                i = i+1
                CommandButton1.Caption = i
            Wend
    End If
End Sub

Что и где нужно менять и добавлять? 
Одновременно, подскажите, пожалуйста, как сделать, чтобы кушалось не 100% процессорного времени, а гораздо меньше.

Заранее спасибо.

Автор: RockClimber 3.6.2008, 14:58
Между While и Wend поставить DoEvents? Сам я этой командой не пользовался (необходимости не было), но вроде она для таких случаев...

Добавлено через 56 секунд
Кстати, а ничего, что цикл у вас бесконечный получается??? (в такой записи)

Автор: price 3.6.2008, 23:46
Большущее спасибо!!!!

Цикл - верно, бегает, для меня заковырка, как правильно его останавливать. Сделал процедуру вот такую, она работает. Только лишь подскажите, пожалуйста, грамотно ли с точки зрения написания кода (не лишь бы тяп-ляп, а чтобы грамотно):

Private Sub CommandButton1_Click()
    If run25 = True Then
        CommandButton1.Caption = "stopped"
        run25 = False
        Else
            run25 = True
            Randomize
            While (run25)
                DoEvents
                i = i+1
                CommandButton1.Caption = i
            Wend
    End If
End Sub

Работает код и из While оно выходит, потому что по очередному нажатию на кнопку, оно входит в процедуру CommandButton1_Click и значение run25 меняется на False.
Легко ли догадаться до такой реализации, элегантная это реализация или безграмотная? 

Спасибо.

Автор: Naghual 4.6.2008, 00:09
Все верно, при условии что переменные run25 и i были объявлены ранее на уровне модуля.

Автор: Akina 4.6.2008, 00:18
If run25 = True Then эквивалентно If run25 Then
Вместо Randomize, возможно, надо использовать Randomize Timer - иначе всегда генерится одна и та же последовательность.
Цитата(price @  4.6.2008,  00:46 Найти цитируемый пост)
элегантная это реализация или безграмотная?

В коде нет полезной нагрузки (меняющаяся надпись не в счет) - посему на вопрос ответить однозначно будет затруднительно. Но скорее следует объявить подход безграмотным - он допускает повторный вызов метода (клик по батону) до окончания работы предыдущего вызова. Следовало бы вынести выполнение функции в таймер, запускаемый нажатием этой кнопки.

Автор: RockClimber 4.6.2008, 09:02
Цитата(price @  3.6.2008,  23:46 Найти цитируемый пост)
Цикл - верно, бегает, для меня заковырка, как правильно его останавливать

Обычно делают так, чтобы переменная, от значения которой зависит выход из цикла, менялась в самом цикле, а не неизвестно где и при каких обстоятельствах.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)