2014-09-03 2 views
-1

나는 아주 간단한 카운트 다운 타이머를 가지고 있습니다. 타이머의 틱이 변화함에 따라 라벨의 색 (숫자)이 바뀌길 바란다. 녹색으로 시작한 다음 타이머가 00:00이되면 빨간색으로 페이드 (전환)하고 싶습니다.레이블 색상을 1에서 다른 색상으로 바꿈

타이머가 훌륭하게 작동합니다. 타이머가 00:00에 도달하면 빨간색으로 변경되는 레이블을 얻을 수 있습니다. 나는 그것을 퇴색하고 싶습니다. 여기에 코드의 일부가 있습니다.

'handles the label ticking down' 
Private Sub tmrCountdown_Tick(sender As Object, e As EventArgs) Handles tmrCountdown.Tick 
    Dim ts As TimeSpan = TargetDT.Subtract(DateTime.Now) 
    If ts.Milliseconds > 0 Then 
     lblTime.Text = ts.ToString("mm\:ss") 
     lblTime.ForeColor = Color.FromArgb(0, 255, 0) 
    Else 
     lblTime.ForeColor = Color.FromArgb(255, 0, 0) 'changes label color to red when it hits 00:00' 
     'stops the timer once the label reaches 00:00 
     lblTime.Text = "00:00" 


     'Plays sound when timer hits 00:00' 
     My.Computer.Audio.Play(My.Resources.alarm, AudioPlayMode.BackgroundLoop) 
     tmrCountdown.Stop() 

     End If 
End Sub 
+0

당신은 그라데이션을 의미합니까? 값이 빨간색/노란색/녹색으로 변환되는 "밴드"를 정의하는 것이 더 쉽습니다. 또한 일부 색상은 매우 직관적이지 않습니다. – Plutonix

+0

페이드 란 한 색으로 시작하여 다른 색으로 전환한다는 뜻입니다. 그래서 그것은 단색의 녹색에서 단색의 붉은 색으로 변합니다. – MrGerrm

+0

그런 다음 녹색 값을 줄이고 시간이 0에 가까워지면 색상 생성기에서 사용되는 빨간색 값을 증가시킵니다. 이는 그라디언트라고합니다. – Plutonix

답변

2

,하지만 난 라벨 빛나는 빨간색 이런 식으로 뭔가를 찾고 있었다 . 이렇게하기 위해 타이머를 생성 한 다음 조건부 카운터를 설정하여 레이블 색상의 RGB 값을 변경했습니다. 변경 비율은 timer.interval 값에 의해 설정됩니다. 희망이 사람을 도움이됩니다.

Public Class AlertWindow 

Dim Red As Integer = 0 
Dim Green As Integer = 0 
Dim Blue As Integer = 0 
Dim CountUp As Boolean = True 

Private Sub AlertWindow_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 


    Timer1.Enabled = True 

End Sub 

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick 

    If CountUp = True Then 

     If Red < 253 Then 
      Red = Red + 1 
     Else 
      CountUp = False 
     End If 

    End If 

    If CountUp = False Then 

     If Red > 0 Then 
      Red = Red - 1 
     Else 
      CountUp = True 
     End If 

    End If 

    Label1.ForeColor = Color.FromArgb(Red, Blue, Green) 

End Sub 

최종 클래스 페이드로

+0

이 오랜 시간에 처음으로이 계정에 로그인 한 경우 확인해야합니다. 당신의 대답을 보았습니다. 나는 더 이상 필요 없지만 대답 해 주셔서 감사합니다. 나는 그것을 시도하고 훌륭한 해결책 :) – MrGerrm

0

페이드를 들어 당신은 예를 들어 알파 매개 변수

을 사용할 수 있습니다에서 :

Static Alpha As Integer 

    lblTime.BackColor = Color.FromArgb(Alpha , 255, 0, 0) 

    Alpha += 5 'amount of opacity change for each timer tick 
    If Alpha > 255 Then lblTime.Enabled = False 'finished fade-in 
+0

확실히 작동하지만 사각형 상자가 아닌 텍스트의 색상을 변경하는 방법이 있습니까? 내가 Back.Color하지만 작동하지 않았다. T_T – MrGerrm

+0

불행히도 알파 매개 변수는 전경색에서 작동하지 않습니다. lblTime.ForeColor = Color.FromArgb (0, 255, 255 - alpha, 255 - 알파). – Jala

+0

정말 멋지 네요! 알파가 없으면 오류가 발생합니다. lblTime.ForeColor = Color.FromArgb (0, 0 + 알파, 255 - 알파, 0) 그게 내가 가지고있는 것입니다. 원한다면 Red 255가 나오면 오류가 발생하고 다음과 같이 말합니다 : " '260'의 값은 'red'에 유효하지 않습니다. 'red'는 0보다 크고 255보다 작거나 같아야합니다. . " – MrGerrm

0

이 당신이 함께 색상을 평균 할 때 더 나은 작동합니다.

당신은 당신이 당신의 타이머 간격에 따라있는 TickCount 원하는 주어진 값 무엇을 해결해야한다 :이 오래된 스레드 알고

Private tickCount As Integer = 100 
Private tickValue As Integer = 0 

Private Sub tmrCountdown_Tick(sender As Object, e As EventArgs) _ 
           Handles tmrCountdown.Tick 
    If tickValue > tickCount Then 
    tmrCountdown.Stop() 
    tickValue = 0 
    Else 
    lblTime.ForeColor = AvgColor(Color.Green, Color.Red, tickValue, tickCount) 
    tickValue += 1 
    End If 
End Sub 

Private Function AvgColor(startColor As Color, 
          finalColor As Color, 
          colorValue As Integer, 
          colorCount As Integer) As Color 
    Dim r1 As Integer = startColor.R 
    Dim g1 As Integer = startColor.G 
    Dim b1 As Integer = startColor.B 

    Dim r2 As Integer = finalColor.R 
    Dim g2 As Integer = finalColor.G 
    Dim b2 As Integer = finalColor.B 

    Dim avgR As Integer = r1 + ((r2 - r1) * colorValue)/colorCount 
    Dim avgG As Integer = g1 + ((g2 - g1) * colorValue)/colorCount 
    Dim avgB As Integer = b1 + ((b2 - b1) * colorValue)/colorCount 

    Return Color.FromArgb(avgR, avgG, avgB) 
End Function 
관련 문제