Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

Как анимировать нажатие кнопки?

29.08.2016, 21:03. Показов 2477. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте.
Есть изображение, соответствующее нажатому состоянию и изображение, соответствующее отпущенному состоянию кнопки.
Когда-то в VB-6 я вставлял в коде в события MouseUp и MouseDown элемента управления Image команды загрузки соответствующих изображений. Получалась довольно наглядная анимация процесса нажатия кнопки. В VB.Net на эту тему есть что-либо более продвинутое?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.08.2016, 21:03
Ответы с готовыми решениями:

Как отловить нажатие кнопки в приложении?
Подскажите, как отловить нажатие кнопки в ВБ.нет?

Как реализовать выполнение работы на нажатие кнопки Enter
Приветствую всех, подскажите как реализовать выполнение работы на нажатие кнопки Enter я ввожу вручную пароль и нажимаю кнопку на форме,...

Как отследить нажатие на системные кнопки в заголовке окна?
Как отследить нажатие на системные кнопки в заголовке окна?

12
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
30.08.2016, 07:13
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

jkrnd, в vb.net все тоже самое, но добавилось MouseEnter и MouseLeave.

Из более продвинутого наверное только - СКИНЫ, которые перерисовывают стандартный контрол кнопки... Но это уже не средства NET... А стороннее решение
2
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
30.08.2016, 07:40  [ТС]
Yury Komar, а какой элемент управления лучше для этого использовать. Image в VB.Net я не нашёл. Неужели для подобной задачи следует использовать PictureBox? Я попробовал грузить картинки в кнопку - грузится только одна.
VB.NET
1
Button1.Image = imgList.Images(0)
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
30.08.2016, 08:44
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

jkrnd, могу предложить таку штуку, писал для одного из своих проектов:
модуль
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Module ButtonStyles
 
'Использование:  SetButtonStyles(Me, My.Resources.LINKV1A, My.Resources.LINKV1B, My.Resources.LINKV1C, ImageLayout.Zoom)
'Эта штука в Runtime изменияет все кнопки формы в трех положениях на необходимые картинки (скины)
 
 
    Private _Original As Image = Nothing
    Private _Enter As Image = Nothing
    Private _Down As Image = Nothing
 
    Public Sub SetButtonStyles(ByVal Form As Form, ByVal ImageORIGINAL As Image, ByVal ImageENTER As Image, ByVal ImageDOWM As Image, ByVal ImageLayout As ImageLayout)
        _Original = ImageORIGINAL
        _Enter = ImageENTER
        _Down = ImageDOWM
        If _Original IsNot Nothing Then
            For Each ctrl As Button In Form.Controls.OfType(Of Button)()
                AddHandler ctrl.MouseEnter, AddressOf MEnter
                AddHandler ctrl.MouseDown, AddressOf MDown
                AddHandler ctrl.MouseUp, AddressOf MUp
                AddHandler ctrl.MouseLeave, AddressOf MLeave
                ctrl.BackColor = Color.Transparent
                ctrl.FlatStyle = FlatStyle.Flat
                ctrl.FlatAppearance.BorderSize = 0
                ctrl.FlatAppearance.MouseDownBackColor = Color.Transparent
                ctrl.FlatAppearance.MouseOverBackColor = Color.Transparent
                ctrl.BackgroundImageLayout = ImageLayout
                ctrl.BackgroundImage = _Original
            Next
        End If
    End Sub
 
    Private Sub MEnter(ByVal sender As Object, ByVal e As System.EventArgs)
        sender.BackgroundImage = _Enter
    End Sub
    Private Sub MDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If e.Button = MouseButtons.Left Then
            sender.BackgroundImage = _Down
        End If
    End Sub
    Private Sub MUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        sender.BackgroundImage = _Enter
    End Sub
    Private Sub MLeave(ByVal sender As Object, ByVal e As System.EventArgs)
        sender.BackgroundImage = _Original
    End Sub
End Module


в ресурсы проекта добавить три изображения кнопки, на каждое из состояний (без фокуса\при наведении\нажатая) и указать их при вызове метода SetButtonStyles
6
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
30.08.2016, 08:52
демонстрация коды, предложеного выше
Изображения
 
3
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
30.08.2016, 08:57
Цитата Сообщение от jkrnd Посмотреть сообщение
Неужели для подобной задачи следует использовать PictureBox?
нет, используйте все тот же Button, только картинку для нее грузите в BackgroundImage... таким образом все свойства кнопки у вас остаются и можно ими пользоваться как и раньше.... Думаю мой коды(выше) вам в этом очень поможет.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
30.08.2016, 12:32  [ТС]
Цитата Сообщение от Yury Komar Посмотреть сообщение
Module ButtonStyles
а нельзя поделиться картинками, как на демонстрационном примере или файлом ресурсов?
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
30.08.2016, 18:06
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

jkrnd, скину вам ссылку. а вообще, если у вас установлена программа MS FrontPage, вот в ресурсах у нее этих картинок ВАЛОМ.

...
Кстати, есть и еще один вариант, но с самими изображениями придется чуток повозиться.
Суть в том, что файл скина кнопки будет всего один и содержать картинки всех трех состояний кнопки вряд, принцып тот же самый, только при наведении метод будет извлекать часть изображения для нужного состояния кнопки и грузить ее как фон... Удобен тем, что всего один файл( как скин кнопки) содержит... Плюс, "чёрнобеливание" картинки, когда кгопка в покое, в некоторых ПО такой вариант отображения тоже неплохо смотрится.
Сегодня уже не смогу скинуть, завтра вечером.
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
31.08.2016, 17:20
jkrnd, как и обещал...

вот для такого изображения Название: 1.png
Просмотров: 92

Размер: 643 байт
скин кнопки в одном файле
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
Вложения
Тип файла: zip КНОПКИ.zip (6.55 Мб, 26 просмотров)
4
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
31.08.2016, 18:11  [ТС]
Цитата Сообщение от Yury Komar Посмотреть сообщение
"1.png"
нельзя ли скинуть сам файл "1.png"
Цитата Сообщение от Yury Komar Посмотреть сообщение
вот для такого изображения
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
31.08.2016, 18:19
jkrnd, суть в том, что картинка в ширину делится на равные три части, и каждая из них отвечает за свое состояние кнопки...
Вложения
Тип файла: zip 1.zip (775 байт, 21 просмотров)
2
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
31.08.2016, 21:43
Аналогичный прием использовался в Delphi кнопках.
Изображения
 
2
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
01.09.2016, 07:05
ovva, во. именно он. только у меня три состояния.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.09.2016, 07:05
Помогаю со студенческими работами здесь

Как сымитировать нажатие кнопки при запуске программы
Как сделать чтобы после запуска программы кнопка была нажата. Выбираю Focus() не работает. Выбираю Select() не работает.

Как запустить готовую функцию (нажатие кнопки) из другой функции?
Доброго времени. Осваиваю VBnet, dопрос глупый, но ответ найти не могу. Есть программа/форма. По нажатию на кнопку происходить запись...

Как при нажатие кнопки поменять текст в Label1 другой формы
Всем привет! Как можно менять текст Label при нажатие на кнопку ? Form1 Есть Label и кнопка с текстом (Open Form 2) Fomr2 Есть...

Как остледить нажатие кнопки "Отмена" в InputBox'е
Dim IB As String = InputBox(&quot;Для входа в программу введите свое имя и пароль через пробел.&quot;, &quot;Вход в программу&quot;) Как...

Нажатие кнопки в WebBrowser
Как сделать что бы в Webbrowser1 в котором есть одна форма и кнопка как заполнить форме я нашёл а как нажать кнопку? Помогите с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru