[c#] Cómo mostrar un menú contextual al hacer clic con el botón derecho en un elemento del menú



Answers

Probablemente tendrás que p / invocar el método.

[DllImport("user32.dll")]
static extern bool TrackPopupMenuEx(IntPtr hmenu, uint fuFlags, int x, int y,
IntPtr hwnd, IntPtr lptpm);

const int TPM_RECURSE = 0x0001; 
Question

Estoy trasladando una aplicación MFC a .NET WinForms. En la aplicación MFC, puede hacer clic con el botón derecho en un menú o en un elemento del menú contextual y mostramos otro menú contextual con elementos de diagnóstico y configuración. Estoy tratando de portar esta funcionalidad a .NET, pero estoy teniendo problemas.

He podido capturar el clic derecho, desactivar el clic del menú subyacente y abrir un menú contextual en la ubicación correcta, pero el menú original desaparece tan pronto como pierde el foco.

En MFC, mostramos el nuevo menú contextual llamando a TrackPopupMenuEx con el indicador TPM_RECURSE .

ContextMenu y las nuevas clases ContextMenuStrip en .NET solo tienen un método Show . ¿Alguien sabe cómo hacer esto en .NET?

EDITAR

He intentado usar TrackPopupMenuEx a través de ap / invoke , pero eso te limita a usar un ContextMenu en lugar de un ContextMenuStrip que parece fuera de lugar en nuestra aplicación. Tampoco funciona correctamente. No funciona con los nuevos MenuStrip y ContextMenuStrip .

También intenté subclasificar ToolStripMenuItem para ver si puedo agregarle un menú contextual. Eso está funcionando para MenuStrip , pero ContextMenuStrip todavía permite que los eventos de clic derecho pasen como clics.






Links