2010-02-23 12 views
1

J'utilise ToolStripDropDown pour héberger le contrôle utilisateur en tant que fenêtre contextuelle. Le problème est lorsqu'une bande de menu contextuel est affichée à partir de cette fenêtre contextuelle, la fenêtre elle-même se ferme au moment où le menu contextuel s'ouvre. J'ai essayé de sous-classer ContextMenuStrip et ajouté WS_EX_NOACTIVATE à CreateParams mais rien n'a changé. J'ai d'abord pensé qu'il n'y avait aucun moyen de le faire puisque c'est un comportement commun, mais j'ai ensuite essayé de placer une classe TextBox sur le contrôle utilisateur pop-up et d'appeler le menu contextuel Edit control - et la fenêtre pop-up parent ne s'est pas fermée . Qu'est-ce qui me manque?Fenêtre contextuelle et menu contextuel

+1

Pourriez-vous nous montrer du code? –

+0

Je suis un peu confus quant à ce que vous demandez. Je comprends le concept de l'hébergement d'un UserControl dans un ToolStripDropDown. Ce dont je ne suis pas sûr, c'est comment fonctionne une fenêtre contextuelle et un menu contextuel. Plus de deets s'il vous plait? Ou du code? – Ken

+0

J'utilise ToolStripDropDown de la manière décrite dans cet article: http://www.codeproject.com/KB/menus/SuperContextMenu.aspx. La propriété ContextMenuStrip de la propriété UserControl hébergée est définie sur un menu contextuel qui s'affiche à l'aide du bouton droit de la souris, mais la fenêtre contextuelle ToolStripDropDown est fermée juste au moment où le menu contextuel est affiché. –

Répondre

1

Avait un problème similaire. Sur mon UserControll était une tooltrip. Lorsque j'ai appuyé sur le bouton toolsstripdropdown, la liste déroulante était affichée mais la fenêtre contextuelle disparaissait. La raison en était que popup.Autoclose était vrai. Après avoir mis à false, le popup n'est plus fermé.

 ToolStripDropDown popup = new ToolStripDropDown(); 
     popup.AutoClose = false;   //Set to FALSE 
     popup.Margin = Padding.Empty; 
     popup.Padding = Padding.Empty; 
     ToolStripControlHost host = new ToolStripControlHost(userControl1); 
     host.Margin = Padding.Empty; 
     host.Padding = Padding.Empty; 
     popup.Items.Add(host); 
     popup.Show(button1, new Point(100,100)); 
0

Solution réelle devrait être celui dans le commentaire final de Martin: Utilisez ContextMenu au lieu de ContextMenuStrip Que l'on a travaillé pour moi, et ne ToolStripDropDown plus ferme par lui-même quand un clic droit sur l'un de ses contrôles de contenu, comme il devrait. Nous en avons toujours besoin pour AutoClose, désactiver AutoClose sur ToolStripDropDown fera de mauvaises choses, il est supposé se fermer en perdant le focus. Exemple: ouvrir une autre fenêtre d'application, et le ToolStripDropDown continuera à apparaître en haut