none
¿Cómo puedo evitar que se visualice automáticamente el menú contextual?

    Pregunta

  • Es decir, he agregado un menú contextual a un formulario, pero quiero que no se despliegue siempre sino cuando se cumplan determinadas condiciones.

    Cómo hago para que no se visualice automáticamente al hacer click con el botón derecho?

    Probé con la propiedad Visible, aunque la acepta, no veo que surta efecto.


    • Editado James-2016 viernes, 30 de diciembre de 2016 1:16
    viernes, 30 de diciembre de 2016 1:15

Respuestas

  • Puedes poner un flag. Si quieres verlo, debes llamar al WndProc de MyBase.

    Public Class Form1
        Dim verMenuContextual = False
    
        Protected Overrides Sub WndProc(ByRef m As Message)
            If (m.Msg <> &H7B) Or verMenuContextual Then 'WM_CONTEXTMENU
                MyBase.WndProc(m)
            End If
    
        End Sub
    End Class

    si verMenuContextual es True, entonces se nuestra.

    Podrías conseguir el mismo efecto con sólo asignar/quitar la referencia al context-menu-strip de la propiedad correspondiente en el formulario. 



    • Marcado como respuesta James-2016 viernes, 30 de diciembre de 2016 1:54
    • Editado walter_5 viernes, 30 de diciembre de 2016 17:47
    viernes, 30 de diciembre de 2016 1:42

Todas las respuestas

  • Public Class Form1
        Protected Overrides Sub WndProc(ByRef m As Message)
            If (m.Msg <> &H7B) Then 'WM_CONTEXTMENU
                MyBase.WndProc(m)
            End If
    
        End Sub
    End Class
    

    viernes, 30 de diciembre de 2016 1:29
  • Gracias, el código proporcionado hace exactamente lo que consulto.

    Pero cómo haría cuando quiera visualizarlo?

    viernes, 30 de diciembre de 2016 1:33
  • Puedes poner un flag. Si quieres verlo, debes llamar al WndProc de MyBase.

    Public Class Form1
        Dim verMenuContextual = False
    
        Protected Overrides Sub WndProc(ByRef m As Message)
            If (m.Msg <> &H7B) Or verMenuContextual Then 'WM_CONTEXTMENU
                MyBase.WndProc(m)
            End If
    
        End Sub
    End Class

    si verMenuContextual es True, entonces se nuestra.

    Podrías conseguir el mismo efecto con sólo asignar/quitar la referencia al context-menu-strip de la propiedad correspondiente en el formulario. 



    • Marcado como respuesta James-2016 viernes, 30 de diciembre de 2016 1:54
    • Editado walter_5 viernes, 30 de diciembre de 2016 17:47
    viernes, 30 de diciembre de 2016 1:42
  • Muchas gracias, funciona!
    viernes, 30 de diciembre de 2016 1:54