2009-07-23 19 views
0

StatusStrip内のToolStripStatusLabelの位置にContextMenuStripを表示します。通常のコントロールにはPointToScreen/PointToClient/etcがありますが、ToolStripStatusLabelはComponentから派生しているため、そうではありません。StatusBar項目の位置にContextMenuStripを表示

ご協力いただければ幸いです。 ToolStripStatusLabelのBoundsプロパティをチェック

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

答えて

0

あなたはちょうどこのような何かを行うことはできません。あなたがする必要がある何をするために、このようにそれを使用します。

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

0

それはToolStripStatusLabelをクリックしますと、フォーム上のマウスの適切な場所を得るに必要な手順のカップルがあります。あなたが言及しているように、ToolStripStatusLabelにはPointToClientまたはPointToScreenメソッドはありませんが、親のStatusStripコントロールはありません。

試してみてください。私は同じ問題と格闘し、この質問をGoogleで検索することが起こったという理由だけで

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

非常に、非常に遅く答え、。最高の解決策として私が見いだしたことは、これまでの回答に一つの素敵なひねりを加えています。ここにある:

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

マウスが境界座標に制御(e.X、e.Y)に対する相対座標追加メニューが正確に正しい位置に表示させます。これを省略すると、ToolStripItemの左上隅にメニューが表示されます。記録のために。

関連する問題