2011-12-30 3 views
3

У меня есть приложение с одним окном формы Теперь я хочу изменить form opacity, когда приложение запускается. Значит, когда приложение запускает его, будет отображаться форма low opacity, и в качестве времени increse он отобразит полную форму с 100 opacity. Итак, как это сделать. (следует ли использовать таймер для управления непрозрачностью, если да, то как ????)Прозрачность формы окна .. Как контролировать?

ответ

3

В конструкторе формы вы можете написать что-то вроде этого.

this.Opacity = .1; 
timer.Interval = new TimeSpan(0, 0, intervalinminutes); 
timer.Tick += ChangeOpacity; 
timer.Start(); 

А затем определить метод, как этот

void ChangeOpacity(object sender, EventArgs e) 
{ 
    this.Opacity += .10; //replace.10 with whatever you want 
    if(this.Opacity == 1) 
     timer.Stop(); 
} 
+0

ОК, но как вы думаете, он будет работать как форма нагрузки ... Значит, когда приложение запускает его, будет отображаться небольшая форма непрозрачности, и с учетом времени он покажет полную форму со 100 непрозрачностью. ??? –

+0

Да, это сработает. Для этого сначала вам нужно установить непрозрачность для низкого значения. Я обновил ответ. – Maheep

+1

Я бы добавил проверку, если значение равно 1, а затем остановите таймер. – ivowiblo

3

угасать формы в и, я обычно делаю это:

for(double opacity = 0.0; opacity <= 1.0; opacity += 0.2) { 
    DateTime start = DateTime.Now; 
    this.Opacity = opacity; 

    while(DateTime.Now.Subtract(start).TotalMilliseconds <= 30.0) { 
     Application.DoEvents(); 
    } 
} 

Это хороший, простое решение, если вы будете делайте это очень редко. В противном случае я бы рекомендовал использовать потоки.

+0

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

+0

@minitech - Приятно, я помещал это в событие form_load, и он работает хорошо, но когда я его помещал в событии form1_FormClosing (с изменениями в цикле, начиная с 1.0 до 0, форма просто закрывается и не исчезает). Любые идеи, почему? – harag

+0

@harag: Это потому, что событие 'FormClosing' происходит прямо перед тем, как форма закрывается, т. е. он * будет * закрыт, если вы его не отменяете. Это потому, что 'Application.DoEvents()' обрабатывает ожидающие сообщения, например те, которые закрывают форму. Поэтому для закрытия установите 'e.Cancel'' true', затемнитесь, затем снова закройте, но обязательно сохраните флаг внутри своей формы, чтобы вы не оказались в бесконечном цикле. – Ryan

1

В конструкторе запустите таймер, который вызовет метод при каждом тике.

timer.Interval = 1000; 
timer.Tick += new EventHandler(TimerEventProcessor); 
timer.Start(); 

............

private static void TimerEventProcessor(Object myObject, 
              EventArgs myEventArgs) 
    { 
     if(this.Opacity < 1) 
     this.Opacity += .1; 
     else 
      timer.Stop(); 
    } 
+0

Может ли у меня предлагать, как делать то же самое, когда форма закрывается ??? Значит, когда я закрываю его, будет непрозрачность –

+0

В обработчике событий закрытия формы вы можете отменить событие, которое запустит таймер, когда непрозрачность будет равна 0, закройте форму самостоятельно. –

0

В конструктору, установите непрозрачность на 0 и запустить таймер с интервалом, как-то маленькое 10 или 100 миллисекунд , В timer_Tick случае, вам просто нужно запустить this.Opacity += 0.01;

Это сделает это так, что непрозрачность начинается с 0 и увеличиваются на .01 каждые несколько миллисекунд, пока не будет 1 (Непрозрачность является двойной, когда он достигает значения 1 он полностью непрозрачен)

Смежные вопросы