Попытка определить, находится ли мышь над открытым меню инструментов или контекстным меню при прокручивании мыши

У меня есть приложение Winforms с Toolstrip и Datagridview.

Я пытаюсь реализовать MouseWheeling на ToolStripMenuItems на основе некоторой информации здесь:

Я добавил событие Mousewheel к DataGridView, так как добавление его в базовую форму не сработало. Моя проблема в том, что я не могу найти способ определить, когда курсор мыши находится над открытым ToolstripMenu, он всегда говорит, что он над DataGridView.

Я пробовал несколько разных подходов, включая текущий код:

    Public Shared Function FindControlAtPoint(container As Control, pos As Point) As Control
        Dim child As Control
        For Each c As Control In container.Controls
            If c.Visible AndAlso c.Bounds.Contains(pos) Then
                child = FindControlAtPoint(c, New Point(pos.X - c.Left, pos.Y - c.Top))
                If child Is Nothing Then
                    Return c
                Else
                    Return child
                End If
            End If
        Next
        Return Nothing
    End Function

    Public Shared Function FindControlAtCursor(form As Form) As Control
        Dim pos As Point = Cursor.Position
        If form.Bounds.Contains(pos) Then
            Return FindControlAtPoint(form, form.PointToClient(Cursor.Position))
        End If
        Return Nothing
    End Function

1 Прокрутка колесиком мыши элементов меню панели инструментов


person user3329538    schedule 26.02.2014    source источник
comment
Вы пробовали использовать события MouseHover/MouseEnter для ToolStripMenuItem?   -  person varocarbas    schedule 26.02.2014
comment
Сейчас я работаю над этим, чтобы создать переменную класса для отслеживания входа и выхода. Нет ли способа узнать, находится ли мышь над панелью инструментов?   -  person user3329538    schedule 27.02.2014
comment
Я должен прикрепить событие Mousewheel к datagridview, чтобы заставить его сработать, есть ли способ остановить сам datagridview, чтобы остановить прокрутку?   -  person user3329538    schedule 27.02.2014
comment
Не могли бы вы прочитать, понять и реализовать/проверить мое предложение вместо того, чтобы продолжать сосредотачиваться на своей проблеме? Эти события запускаются всякий раз, когда мышь находится над данным элементом, вам не нужно ничего делать. Весь ваш код можно заменить одним из этих событий.   -  person varocarbas    schedule 27.02.2014
comment
Привет, @varocarbas, я работаю над этим последние пару часов. Я реализовал события MouseEnter и MouseLeave, чтобы отслеживать, нахожусь ли я над элементом. Как мне отслеживать событие Mousewheel в этом случае?   -  person user3329538    schedule 27.02.2014
comment
Что вы имеете в виду под треком? Представьте, что у вас есть contextMenu с 3 элементами; и вы используете колесико мыши для перемещения от элемента 2 к элементу 1. Если вы полагаетесь, например, на MouseEnter в обоих элементах, это событие должно запускаться всякий раз, когда мышь входит в него, независимо от того, как он туда попадает (через колесико мыши или обычное движение). Не могли бы вы подробнее рассказать о конкретной проблеме, которую вы хотите решить?   -  person varocarbas    schedule 27.02.2014
comment
@varocarbas У меня есть длинное контекстное меню, что-то вроде этого: i.stack.imgur.com/XUZWZ.png Я хочу реализовать на нем прокрутку мыши, имитируя клавиши ВВЕРХ и ВНИЗ.   -  person user3329538    schedule 27.02.2014
comment
Пожалуйста, имейте в виду, что весь смысл написания комментария состоит в том, чтобы дать вам некий намек; не начиная целую дискуссию (для этого я бы написал ответ). Вы должны обновить свой пост с любой соответствующей информацией. НО все же я не вижу точного смысла того, что вы говорите и почему у вас не работает MouseEnter (срабатывает каждый раз при входе мыши в пункт)! Пожалуйста, обновите свой вопрос со всей этой информацией, со всем кодом, который вы пробовали (включая события MouseEnter/Hover), и четко объясните (пример всегда помогает), почему он не дает того, что вы хотите.   -  person varocarbas    schedule 27.02.2014
comment
Я уже потратил на это достаточно много времени (и извините, но довольно много спрашивающих доказали мне, что быть милым и стремиться помочь - очень плохая идея с некоторыми людьми, не уверен, что в вашем случае) ... также имейте в виду что я здесь не для того, чтобы объяснять вам, как опубликовать четкий вопрос (вы должны были приложить усилия самостоятельно) ... Дайте мне знать, как только вы обновите свой пост; если я увижу, что все ясно объяснено, я мог бы ответить; в противном случае следует дождаться следующего помощника.   -  person varocarbas    schedule 27.02.2014