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