Плавное изменение цвета контрола - Visual Basic .NET
Формулировка задачи:
Ребят, столкнулся с проблемой. Написал код для плавного изменения цвета(Уж как умею), но он работает криво, немного мерцает и цвета резко меняются. Наведите, пожалуйста, на путь истинный. Код:
Решение задачи: «Плавное изменение цвета контрола»
textual
Листинг программы
Public Class Form1 Private _timer As Timer 'таймер для анимации Private _ratio As Single 'соотношение смешивания Private _onBlend As Boolean 'для анимации. Определяет сторону смешивания 'цвета между которыми происходит переход Private _colorA As Color = Me.BackColor Private _colorB As Color = Color.BlueViolet Public Sub New() InitializeComponent() 'Me.DoubleBuffered = True ' если форма мерцает End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click _onBlend = Not _onBlend 'работает как переключатель смешивания. можно использовать не дожидаясь конца анимации Me.StartAnimate() End Sub 'подготовка и запуск таймера Public Sub StartAnimate() If _timer Is Nothing Then _timer = New Timer() _timer.Interval = 20 ' 20 * 1/0.1 = 200 мс. Минимальное время анимации AddHandler _timer.Tick, AddressOf Animate _timer.Start() End If End Sub 'вызов функции анимации при каждом такте таймера Public Sub Animate(sender As Object, e As EventArgs) If _onBlend Then _ratio += 0.1F If _ratio >= 1.0F Then _ratio = 1.0F _timer.Stop() _timer.Dispose() _timer = Nothing 'что бы убедить StartAnimate() что таймер не запущен End If Else _ratio -= 0.1F If _ratio <= 0.0F Then _ratio = 0.0F _timer.Stop() _timer.Dispose() _timer = Nothing End If End If Me.BackColor = GetBlendColor(_colorA, _colorB, _ratio) End Sub Public Shared Function GetBlendColor(ColorA As Color, ColorB As Color, Ratio As Single) 'If Ratio < 0.0F Or Ratio > 1.0F Then 'для контроля, если используете в других функциях. ' Throw New OverflowException("Значение должно быть в пределах от 0.0 до 1.0") 'End If Return Color.FromArgb(ColorA.R + (CInt(ColorB.R) - ColorA.R) * Ratio, _ ColorA.G + (CInt(ColorB.G) - ColorA.G) * Ratio, _ ColorA.B + (CInt(ColorB.B) - ColorA.B) * Ratio) End Function 'такая структура позволяет не останавливая анимацию переключать сторону смешивания End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д