在StatusBar项的位置显示ContextMenuStrip

时间:2009-07-23 02:45:28

标签: c# contextmenustrip statusstrip

我想在StatusStrip中的ToolStripStatusLabel位置显示ContextMenuStrip。普通控件有PointToScreen / PointToClient / etc,但由于ToolStripStatusLabel是从Component派生的,所以它没有。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分: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左上角的菜单。为了记录。

答案 1 :(得分:0)

你不能只做这样的事情:

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

答案 2 :(得分:0)

查看ToolStripStatusLabel的Bounds属性。像这样使用它来做你需要做的事情:

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

答案 3 :(得分:0)

当单击ToolStripStatusLabel时,在表单上获取鼠标的正确位置需要执行几个步骤。正如您所提到的,ToolStripStatusLabel没有PointToClient或PointToScreen方法,但是父StatusStrip控件没有。

尝试:

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