0

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

任何帮助,将不胜感激。

4

4 回答 4

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

将相对于控件 (eX, eY) 的鼠标坐标添加到边界坐标使菜单出现在正确的位置。省略此项将显示 ToolStripItem 左上角的菜单。作为记录。

于 2011-08-18T09:18:00.297 回答
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));
}
于 2011-02-23T20:14:22.900 回答
0

你不能做这样的事情:

int x = label.Bounds.Location.X + statusStrip.Location.X;
int y = label.Bounds.Location.Y + statusStrip.Location.Y;
menu.Show(this, x, y);
于 2009-07-23T03:20:10.980 回答
0

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

contextMenuStrip1.Show(statusStrip1, toolStripStatusLabel2.Bounds.X, toolStripStatusLabel2.Bounds.Y);            
于 2009-07-23T03:33:59.140 回答