2009-10-11 10 views

Répondre

20

I figured it out:

layoutMenus.Show(Cursor.Position.X, Cursor.Position.Y); 
+5

à proprement parler, ce n'est pas la réponse À la question. Cela montrera le menu contextuel à l'emplacement du pointeur, pas à un point juste en dessous du bouton. –

+0

Je suis arrivé ici à la recherche de cela exactement. Je vous remercie!! –

+0

La méthode ContextMenu.Show() a un certain nombre de surcharges - dans votre cas, une bonne solution serait celle-ci: Elle positionne le menu contextuel _relative à votre bouton_. 'layoutMenus.Show (Button1, nouveau Point (0, Button1.Height))' – AeonOfTime

1

Assurez-vous que lorsque vous positionner le menu contextuel que vous passez les coordonnées d'écran correct. Vous devrez utiliser quelque chose comme Control.PointToScreen, en utilisant les coordonnées x, y, basées sur la position du contrôle dans son parent.

33

Je sais c'est une vieille question, mais je pense que cela peut aider d'autres personnes. Le code suivant affichera le menu contextuel juste en dessous du bouton sur lequel vous cliquez et le bouton ressemblera à un bouton déroulant.

private void Button1_Click(object sender, EventArgs e) 
{ 
    Button btnSender = (Button)sender; 
    Point ptLowerLeft = new Point(0, btnSender.Height); 
    ptLowerLeft = btnSender.PointToScreen(ptLowerLeft);   
    ctMenuStrip.Show(ptLowerLeft); 
} 
+0

c'est le comportement que je cherche dans votre solution! Je ne peux pas comprendre comment le faire au sein de la protection OnMouseClick (DataGridViewCellMouseEventArgs e) ... Je suis en train de placer un ContextMenuStrip juste en dessous de mon DataGridViewCell. –

+0

@ D.Allen: Il semble que vous parlez de la classe DataGridView dans .NET et vous remplacez l'événement OnCellMouseClick dans votre classe héritée de DataGridView. Si oui, pourriez-vous s'il vous plaît décrire exactement ce que vous voulez faire.Je pense que vous pouvez obtenir les coordonnées de localisation, X/Y de l'objet DataGridViewCellMouseEventArgs –

+0

Cette solution ne couvre pas un cas de bord où nous plaçons le bouton près de la barre des tâches, puis cliquez dessus pour afficher la bande de menu contextuel. Parfois, la barre de menu masquera le bouton en raison d'un débordement, tandis que le comportement attendu devrait retourner le menu au-dessus du bouton. Mais il n'y a pas de moyen facile de réaliser un tel retournement. –

-1

moyen facile

contextMenuStrip1.Show (Button1, Button1.PointToClient (Cursor.Position));

+0

Il ne fonctionne pas travailler du tout. –

3

Pour autant que je sais le code dont vous avez besoin est ici:

// A droite du bouton

ContextMenuName.Show(ButtonName.Left + ButtonName.Width + this.Left, ButtonName.Top + this.Top); 

Au bas du bouton

ContextMenuName.Show(ButtonName.Left + this.Left, ButtonName.Top + ButtonName.Height + this.Top); 

En bas à droite du bouton

ContextMenuName.Show(ButtonName.Left + ButtonName.Width + this.Left, ButtonName.Top + ButtonName.Height + this.Top); 
+0

Qu'est-ce que 'this' ici? Voulez-vous dire le formulaire lui-même? Le calcul ne fonctionne pas et le menu apparaît dans un endroit inattendu. –

1

J'ai un tooltripDropDown et après avoir cliqué sur le bouton toolstripDropDown je voulais montrer le menu contextuel. Donc, à partir des commentaires ci-dessus j'ai modifié mon code dans l'événement toolStripDropDown_Openining comme suit. cela fonctionne bien.

void toolStripDropDownButton_DropDownOpening(object sender, EventArgs e) 
    { 


      ToolStripDropDownButton btnSender = (ToolStripDropDownButton)sender; 
      Point ptLowerRight = new Point(btnSender.Bounds.Right, btnSender.Bounds.Bottom); 
      ptLowerRight = PointToScreen(ptLowerRight); 
      contextMenuStrip.Show(ptLowerRight); 
    } 
4

ContexMenuName sous le bouton, aligné sur le côté droit du bouton (étend au-dessous de touche et à gauche): ContexMenuName.Show(ButtonName, new Point(ButtonName.Width - ContexMenuName.Width, ButtonName.Height)); Espérons que cela aide sb :)

+0

J'utilise la solution @ saper_2 et cela fonctionne parfaitement bien pour moi. –

Questions connexes