Как анимировать нажатие кнопки? - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Всем здравствуйте. Есть изображение, соответствующее нажатому состоянию и изображение, соответствующее отпущенному состоянию кнопки. Когда-то в VB-6 я вставлял в коде в события MouseUp и MouseDown элемента управления Image команды загрузки соответствующих изображений. Получалась довольно наглядная анимация процесса нажатия кнопки. В VB.Net на эту тему есть что-либо более продвинутое?

Решение задачи: «Как анимировать нажатие кнопки?»

textual
Листинг программы
Public Class Form1
 
#Region "    Скин кнопки 1"
    Private Sub Button1_MouseLeave(sender As Object, e As System.EventArgs) Handles Button1.MouseLeave, MyBase.Load
        Button1.BackgroundImage = GetButtonSkin(Image.FromFile("1.png"), 1, True)
    End Sub
    Private Sub Button1_MouseEnter(sender As Object, e As System.EventArgs) Handles Button1.MouseEnter, Button1.MouseUp
        sender.backgroundimage = GetButtonSkin(Image.FromFile("1.png"), 1)
    End Sub
    Private Sub Button1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
        sender.backgroundimage = GetButtonSkin(Image.FromFile("1.png"), 3)
    End Sub
#End Region
 
    Public Function GetButtonSkin(SourceImage As Image, Optional Return_Skin As Integer = Nothing, Optional ToGray As Boolean = False) As Image
        Dim NewButtonImage As New Bitmap(CInt(SourceImage.Width / 3), SourceImage.Height)
        Dim myGraphics As Graphics = Graphics.FromImage(NewButtonImage)
        Dim ButtonSize As New Rectangle(0, 0, SourceImage.Width / 3, SourceImage.Height)
        Dim getState As Rectangle
 
        If Return_Skin = 1 Then ' Normal State
            getState = New Rectangle(0, 0, SourceImage.Width / 3, SourceImage.Height)
        ElseIf Return_Skin = 2 Then ' Hover State
            getState = New Rectangle(SourceImage.Width / 3, 0, SourceImage.Width / 3, SourceImage.Height)
        ElseIf Return_Skin = 3 Then ' Dowm State
            getState = New Rectangle(SourceImage.Width / 3 * 2, 0, SourceImage.Width / 3, SourceImage.Height)
        Else ' If not Indicated - return Normal State
            getState = New Rectangle(0, 0, SourceImage.Width / 3, SourceImage.Height)
        End If
 
        myGraphics.DrawImage(SourceImage, ButtonSize, getState, GraphicsUnit.Pixel)
 
        Dim PixelColor As Color : Dim PaintToGray As Byte
        If ToGray Then
            For x As Integer = 0 To NewButtonImage.Width - 1
                For y As Integer = 0 To NewButtonImage.Height - 1
                    PixelColor = NewButtonImage.GetPixel(x, y)
                    'Если пиксель непрозрачный, то перекрашиваем его в серый цвет
                    If PixelColor <> Color.FromArgb(0) Then
                        PaintToGray = 0.3 * PixelColor.R + 0.59 * PixelColor.G + 0.11 * PixelColor.B
                        PixelColor = Color.FromArgb(PaintToGray, PaintToGray, PaintToGray)
                        NewButtonImage.SetPixel(x, y, PixelColor)
                    End If
                Next
            Next
        End If
 
        Return NewButtonImage
    End Function
End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5