Как обнаружить mouse_down на фрейме пользовательской формы, когда мышь еще не нажата - PullRequest
0 голосов
/ 19 сентября 2011

Я хочу определить, есть ли mouse_down в любом фрейме формы, когда мышь еще не нажата.Я знаю, как сделать это для клика, но я хочу поймать его до mouse_up.

Спасибо

1 Ответ

2 голосов
/ 19 сентября 2011

Вы можете создать обработчик событий _MouseDown для каждого кадра в форме или, если у вас много кадров, вы можете создать общий класс обработчика событий

Создать модуль класса (например, с именем cUserFormEvents)

Public WithEvents Frme As MSForms.frame
Public frm As UserForm

Private Sub Frme_MouseDown( _
 ByVal Button As Integer, _
 ByVal Shift As Integer, _
 ByVal X As Single, _
 ByVal Y As Single)

    ' Put your event code here
    MsgBox Frme.Caption

End Sub

Объявите коллекцию для своих Рамок

Dim mcolFrames As New Collection

Включите этот код в инициализацию формы

Private Sub UserForm_Initialize()
    Dim ctl As MSForms.Control
    Dim clsEvents As cUserFormEvents

    'Loop through all controls on userform
    For Each ctl In Me.Controls
        'Only process Frames
        If TypeOf ctl Is MSForms.frame Then
            'Instantiate class module and assign properties
            Set clsEvents = New cUserFormEvents
            Set clsEvents.Frme = ctl
            Set clsEvents.frm = Me

            'Add instance to collection
            mcolFrames.Add clsEvents

        End If

    Next ctl

End Sub

Теперь Frme_MouseDown будет выполняться при MouseDown в любом фрейме формы. Доступ к конкретному кадру с помощью Frme

...