2015-12-03 4 views
0

Я пытаюсь использовать кнопку веб-стиля в своей форме, используя некоторые изображения (кнопка ok-off, кнопка ОК и кнопка ok) Я пытаюсь сделать то же самое как на веб-сайте. измените цвет кнопки при прокатке по мыши и снова измените цвет при нажатии. Но я что-то пропустил. Я достиг, чтобы изменить изображение кнопки, когда мышь над ним, но когда я нажимаю на нее, измените только изображение (по процедуре MouseMove), но когда я отпускаю кнопку мыши, событие не может перейти к событию mouseUp. Чего мне не хватает?VBA Forms - Кнопки с изображениями

Private Sub okpress_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
    If okpress.Visible = True Then 
     okoff.Visible = False 
     okpress.Visible = True 
     ok.Visible = False 

    End If 
    MsgBox "ha entrado", vbOKOnly, "Prueba" 
End Sub 

Private Sub okoff_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
    If okoff.Visible = True Or okpress.Visible = True Then 
     okoff.Visible = False 
     okpress.Visible = False 
     ok.Visible = True 
    End If 
End Sub 


Private Sub ok_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
    If okpress.Visible = False Then 
     okoff.Visible = False 
     okpress.Visible = True 
     ok.Visible = False 
    End If 
    Dim a As Integer, b As Index, c As Single, d As Single 

End Sub 




Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
    ok.Visible = False 
    okpress.Visible = False 
    okoff.Visible = True 
End Sub 

ответ

0

Событие MouseUp происходит после того, как MouseDown на той же самой форме, а не там, где мышь. И когда вы скрываете форму, вы также останавливаете цепочку событий.

Решение для вашего случая было бы вместо того, чтобы скрывать кнопку, просто показать перед собой другую. Таким образом, событие MouseUP все равно произойдет, когда вы отпустите мышь, и результат будет таким же.

- Поместите кнопки/изображения с задом наперед в таком порядке: хорошо (c1), выключен (c2), нажмите (c3)

Код:

Private Sub c1_Click() 
c1.Visible = False 
c2.Visible = True 
End Sub 

Private Sub c1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
c3.Visible = True 
End Sub 

Private Sub c1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
c3.Visible = False 
End Sub 

Private Sub c2_Click() 
c1.Visible = True 
c2.Visible = False 
End Sub 

Private Sub c2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
c3.Visible = True 
End Sub 

Private Sub c2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
c3.Visible = False 
End Sub 

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
c1.Visible = False 
c3.Visible = False 
c2.Visible = True 
End Sub 
+0

я пробовал он удаляет 'ok.Visible = False' из процедуры и отправляет ее внизу по дизайну, но все равно происходит то же самое. –

+0

Я отредактировал свой ответ с кодом, который работал для меня .. havent проверил его с изображениями. Кроме того, почему последняя часть кода отключает его, когда мышь перемещается в форме? –

+0

Это было для восстановления нормального состояния кнопок при потере фокуса мыши –