我想在StatusStrip中的ToolStripStatusLabel位置显示ContextMenuStrip。普通控件有PointToScreen / PointToClient / etc,但由于ToolStripStatusLabel是从Component派生的,所以它没有。
任何帮助都将不胜感激。
答案 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));
}