Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2009, 14:33   #1
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
Вопрос Цикл for. Реализация sleep (Delphi) на C#

Помогите решить проблему: Как делается остановка выполнения цикла на определённое время, например на Delphi:
Код:
for i := 0 to Count - 1 do
begin
   Button1.Left := Button1.Left - 1;
   Button1.Width := Button1.Width + 1;
   sleep(100); //ждать 100 миллисекунд до следующего прохода цикла
end
Нечто подобное надо организовать на C#:
Код:
                for (int i = 0; i < 30; i++)
                {
                    this.butSetting.Left -= 4;
                    this.butSetting.Width += 4;
                    this.butSetting.Top -= 4;
                    this.butSetting.Height += 4;
                }
Дело в том, что происходит это мнгновенно, а надо, чтобы выглядело как анимация. Кто не понял, то это нужно, чтобы кнопка при определённом событии увеличилась в размерах, отъехал в левую сторону левый край и вверх верхняя часть кнопки, другими словами левый верхний угол отъехал по диагонали вверх/влево, а правый нижний угол остался на месте. Типа анимация. Знаю что можно таймером, но это как я думаю не вариант, так и код будет легче читать.

Последний раз редактировалось Casper-SC; 31.12.2009 в 14:43. Причина: Дополнение, исправление ошибок, устранение неточностей :)
Casper-SC вне форума Ответить с цитированием
Старый 31.12.2009, 14:50   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Код:
System.Threading.Thread.Sleep(100); // sleep thread for 100 ms
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 31.12.2009, 15:06   #3
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Цитата:
Сообщение от russian-stalker Посмотреть сообщение
Код:
System.Threading.Thread.Sleep(100); // sleep thread for 100 ms
Код:
private void butSetting_MouseHover(object sender, EventArgs e)
        {
            if (this.butSetting.Height < 50)
                for (int i = 0; i < 40; i++)
                {
                    this.butSetting.Left -= 8;
                    this.butSetting.Width += 8;
                    this.butSetting.Top -= 8;
                    this.butSetting.Height += 8;
                    System.Threading.Thread.Sleep(100);
                }
        
        }
Чёто вообще не работает, а происходит задержка и после задержки опять моментально меняет размер.

////////////////////////////////////////////////////////////

Проблему решил сам, после System.Threading.Thread.Sleep(100); надо добавить this.butSetting.Refresh();

Вот что получилось в итоге:
Код:
        private void butSetting_MouseHover(object sender, EventArgs e)
        {
            int XY = 46; //размер шага по осям X и Y
            if (this.butSetting.Height < 50)
                for (int i = 0; i < 5; i++)
                {
                    this.butSetting.Top -= XY;
                    this.butSetting.Height += XY;
                    this.butSetting.Left -= XY;
                    this.butSetting.Width += XY;
                    this.butSetting.Refresh();
                    System.Threading.Thread.Sleep(20);  
                }
            this.butSetting.Text = "Нажми для изменения настроек";
        }

        private void butSetting_MouseLeave(object sender, EventArgs e)
        {
            this.butSetting.Text = "";
            int XY = 46; //размер шага по осям X и Y
            if (this.butSetting.Height > 50)
                for (int i = 0; i < 5; i++)
                {
                    this.butSetting.Top += XY;
                    this.butSetting.Height -= XY;
                    this.butSetting.Left += XY;
                    this.butSetting.Width -= XY;
                    this.Refresh();
                    System.Threading.Thread.Sleep(12);
                } 
            
        }

Последний раз редактировалось Casper-SC; 31.12.2009 в 15:39.
Casper-SC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция Sleep(); VadEr Общие вопросы Delphi 6 10.09.2009 17:45
Реализация BlowFish на Delphi Unconnected Общие вопросы Delphi 2 19.02.2009 12:52
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34
Альтернатива sleep Zuzlan Общие вопросы Delphi 2 01.11.2007 01:44