2016-10-01 4 views
0

두 개의 타이머를 사용하여 양식의 레이블 페이딩을 에뮬레이션하려고합니다. 첫 번째 타이머에서 색상 값이 255에 도달하면 두 번째 타이머가 활성화되어 첫 번째 타이머가 수행 한 작업을 되돌리고 색상 값을 다시 0으로 가져옵니다. 디버깅 할 때 두 번의 1 반올림에서 예상대로 작동 한 다음 timer1> timer2> timer1 이후에는 timer2로 이동하지 않으므로 값이 계속 증가하기 때문에 값이 255를 초과했습니다. 무엇이 문제 일 수 있습니까?C#에서 타이머를 사용하여 레이블을 어떻게 페이드 인 및 페이드 아웃 할 수 있습니까?

timer1.Tick += new EventHandler(timer1_Tick); 
timer2.Tick += new EventHandler(timer2_Tick); 

그리고 여기에 나머지의 :

공개를 Form1()에 당신이 timer2_Tick의 방향을 변경할 때 여러 timer1.Tick 이벤트 처리기를 추가하기 때문에

Timer timer1 = new Timer(); 
Timer timer2 = new Timer(); 
int r = 0; 
int g = 0; 
int b = 0; 
int fade = 0; 

private void timer1_Tick(object sender, EventArgs e) 
    { 
     fade++; 
     if (fade <= 500) //just a number above 255 
     { 
      r++; 
      g++; 
      b++; 
      lblReboot.ForeColor = Color.FromArgb(255, r, g, b); 

      if (r == 255) 
      { 
       fade = 0; 
       r = 255; 
       g = 255; 
       b = 255; 
       timer1.Stop(); 
       timer1.Enabled = false; 
       timer2.Enabled = true; 
       timer2.Interval = 10; 
       timer2.Start(); 
      } 
     } 
    } 

    private void timer2_Tick(object sender, EventArgs e) 
    { 
     fade++; 
     if (fade <= 500) 
     { 
      r--; 
      g--; 
      b--; 
      lblReboot.ForeColor = Color.FromArgb(255, r, g, b); 
     } 

     if (r == 0) 
     { 
      fade = 0; 
      r = 0; 
      g = 0; 
      b = 0; 
      timer2.Stop(); 
      timer2.Enabled = false; 
      timer1.Tick += new EventHandler(timer1_Tick); 
      timer1.Enabled = true; 
      timer1.Interval = 10; 
      timer1.Start(); 
     } 
    } 
+0

WPF를 사용합니까? – Roland

답변

1

이입니다. 두 번째 패스에서 r에 == (255)에 도달하면 통해 - 당신은 여전히이 줄을 제거 256

에 수를 증가합니다 처리 대기중인 다른 틱 이벤트가 타이머 2는 타이머 1 & 시작을 중지하지만

timer1.Tick += new EventHandler(timer1_Tick); 
timer2_Tick의

+0

이것은 ... 고마워요. – elowell