2009-07-23 7 views

Antwort

0

Kannst du nicht einfach so etwas tun:

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

Schauen Sie sich die Bounds Eigenschaft des ToolStripStatusLabel. Verwenden Sie es, so zu tun, was Sie tun müssen:

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

Es gibt ein paar Schritte, die in die richtige Position der Maus immer auf dem Formular, wenn es auf einem ToolStripStatusLabel geklickt. Wie Sie erwähnen, hat das ToolStripStatusLabel keine PointToClient- oder PointToScreen-Methoden, aber das übergeordnete StatusStrip-Steuerelement.

Versuchen:

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

Eine sehr, sehr späte Antwort, nur weil ich mit dem gleichen Problem zu kämpfen passiert ist und diese Frage gegoogelt auf. Was ich als beste Lösung gefunden habe, gibt den Antworten eine nette Wendung. Hier ist sie:

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); 
     } 
    } 

die Maus Hinzufügen von Koordinaten relativ zur Kontrolle (e.X, E.Y) an den Grenzen Koordinaten macht das Menü an genau der richtigen Position angezeigt. Wenn Sie dies auslassen, wird das Menü in der oberen linken Ecke von ToolStripItem angezeigt. Für die Aufzeichnung.

Verwandte Themen