2009-07-23 25 views

Répondre

0

Tu ne peux pas faire quelque chose comme ceci:

int x = label.Bounds.Location.X + statusStrip.Location.X; 
int y = label.Bounds.Location.Y + statusStrip.Location.Y; 
menu.Show(this, x, y); 
0

la propriété Vérifiez Bounds du ToolStripStatusLabel. Utilisez comme ça pour faire ce que vous devez faire:

contextMenuStrip1.Show(statusStrip1, toolStripStatusLabel2.Bounds.X, toolStripStatusLabel2.Bounds.Y);    
0

Il y a quelques étapes à suivre pour obtenir l'emplacement approprié de la souris sur la forme quand il a cliqué sur un ToolStripStatusLabel. Comme vous le mentionnez, ToolStripStatusLabel ne possède pas de méthodes PointToClient ou PointToScreen, contrairement au contrôle StatusStrip parent.

Essayez:

private void toolStripStatusLabel_MouseDown(object sender, MouseEventArgs e) 
{ 
    Point p = e.Location; 
    p.Offset(toolStripStatusLabel.Bounds.Location); 
    myContextMenu.Show(StatusStrip.PointToScreen(p)); 
} 
3

Une réponse très, très tard, juste parce que je me trouvais à lutter avec la même question et googlé cette question. Ce que j'ai trouvé comme la meilleure solution ajoute une belle torsion aux réponses jusqu'à présent. Ici, il est:

void toolStripItem_MouseUp(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) 
     { 
      var label = (ToolStripItem)sender; 
      this.contextMenuStrip1.Show(this.mainStatusStrip, label.Bounds.X + e.X, label.Bounds.Y + e.Y); 
     } 
    } 

Ajout coordonnées de la souris par rapport au témoin (e.X, E.Y) aux limites des coordonnées rend le menu apparaît exactement la bonne position. Si vous omettez cela, le menu s'affiche dans le coin supérieur gauche de ToolStripItem. Pour l'enregistrement.