1

ボタンのクリックに応じてプログラムで表示する ContextMenuStrip があります。メニューのアイテムがマウスオーバーに反応しないことを除いて、すべてが期待どおりに機能します。マウス ボタンが上か下かに関係なく、マウスをメニュー上に置いても目に見える効果はなく、マウス ボタンを離しても期待どおりに項目が選択されません。ただし、アイテムをフルクリックすると、アイテムはアクティブになります。

ContextMenuStrip を表示するためのコードは次のとおりです。

Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
  MyBase.OnMouseDown(e)
  If Enabled Then
    m_MouseDown = True
    If m_State > ButtonState.MousePressed Then
      m_State = ButtonState.MousePressed
    End If
    Invalidate()
    If DropDown IsNot Nothing AndAlso DropDown.Items.Count > 0 Then
      If ShowMenu Then
        ShowMenu = False
      ElseIf arrowRect.Contains(PointToClient(MousePosition)) Then
        ShowMenu = True
        m_MouseHeldWhileOpened = True
        DropDown.Capture = True
      End If
    End If
  End If
End Sub

Protected Property ShowMenu() As Boolean
  Get
    Return m_showMenu
  End Get
  Set(ByVal value As Boolean)
    If value <> m_showMenu Then
      m_ShowMenu = value
      If m_ShowMenu Then
        m_DropDown.Show(Me, GetDropDownSpawnPoint, DropDownDirection)
        m_State = ButtonState.MenuUp
        If m_DropDown.ClientRectangle.Contains(PointToScreen(MousePosition)) Then
          m_DropDown.Capture = True
        End If
      Else
        m_DropDown.Close()
        ElevateState()
      End If
    End If
  End Set
End Property

メニューが正しく応答するように、さまざまなアイデアを試しましたが、そのうちのいくつかは、ここのコードでも明らかです。何か助けがあれば、それは大歓迎です.Googleの他の誰もこの問題を経験していないようです.

あなたが提供できる助けを前もって感謝します。

4

0 に答える 0