Estoy tratando de modelar el comportamiento de un menú desplegable de ComboBox (u otras listas desplegables, incluidos los menús contextuales) donde el menú desplegable se cierra cuando hace clic en cualquier otro lugar, incluso en algo que no se puede enfocar.¿Cómo captura un mouse de captura ComboBox cuando está desplegado?
He intentado suscribir eventos como MouseCaptureChanged, LostFocus y Leave. Tengo un UserControl personalizado que actúa como un menú desplegable y solo quiero cerrarlo cuando el usuario haga clic en cualquier otro lugar.
Esto parece algo que se hace en muchos controles, así que me sorprendería si no hubiera una forma sencilla de hacerlo.
Hasta ahora los métodos sobrecomplicados que puedo encontrar para hacer esto son usar pinvoke y la función SetCapture(), o crear un MessageFilter. Si estas son las únicas opciones, no estoy seguro de cuál es mejor.
Una manera fácil de poner en práctica un menú desplegable como el control es utilizar un ToolStripControlHost y una ToolStripDropDown. Funciona como un ComboBox. Consulte [¿Cómo aparecen los cuadros combinados, al mostrar elementos de la lista, interceptar los eventos del mouse a cualquier lugar en el formulario para ocultar la lista?] (Http://stackoverflow.com/a/8611382/719186) – LarsTech
Estoy probando el ToolStripControlHost. No puedo deshacerme de un borde feo en la parte superior de la ventana emergente o el parpadeo de ComboBox cada vez que abres el menú desplegable. –
Asegúrese de establecer los márgenes de ToolStripContorlHost y el relleno de ToolStripDropDown en 0. El parpadeo de su control es un problema diferente: ¿está tratando de usar un ComboBox con un menú desplegable personalizado? – LarsTech