如何在正确位置单击按钮时显示contextmenustrip

时间:2009-10-11 04:06:10

标签: c# winforms button contextmenustrip

我想点击一个按钮,让它在按钮下面显示一个上下文。当我尝试使用pointtoacreen和top和left坐标时,它会一直显示在屏幕的左侧。

任何建议

10 个答案:

答案 0 :(得分:37)

我知道这是一个老问题,但我认为这可能有助于其他人。下面的代码将显示正在单击按钮下方的上下文菜单,该按钮看起来像一个下拉按钮。

private void Button1_Click(object sender, EventArgs e)
{
    Button btnSender = (Button)sender;
    Point ptLowerLeft = new Point(0, btnSender.Height);
    ptLowerLeft = btnSender.PointToScreen(ptLowerLeft);           
    ctMenuStrip.Show(ptLowerLeft);
}

答案 1 :(得分:21)

我明白了:

layoutMenus.Show(Cursor.Position.X, Cursor.Position.Y);

答案 2 :(得分:5)

按钮下的ContexMenuName,与按钮右侧对齐(展开到按钮下方和左侧): ContexMenuName.Show(ButtonName, new Point(ButtonName.Width - ContexMenuName.Width, ButtonName.Height)); 希望这会对某人有所帮助:)。

答案 3 :(得分:3)

据我所知,您需要的代码在这里:

//按钮右侧

ContextMenuName.Show(ButtonName.Left + ButtonName.Width + this.Left, ButtonName.Top + this.Top);

按钮底部

ContextMenuName.Show(ButtonName.Left + this.Left, ButtonName.Top + ButtonName.Height + this.Top);

按钮右下角

ContextMenuName.Show(ButtonName.Left + ButtonName.Width + this.Left, ButtonName.Top + ButtonName.Height + this.Top);

答案 4 :(得分:1)

确保在定位传递的上下文菜单时,使用正确的屏幕坐标。您需要使用类似Control.PointToScreen的东西,使用x,y,基于控件在其父级中的位置的坐标。

答案 5 :(得分:1)

我有toolstripDropDown,点击toolstripDropDown按钮后我想显示上下文菜单。 所以从上面的评论中我修改了toolStripDropDown_Openining事件中的代码,如下所示。 它工作正常。

void toolStripDropDownButton_DropDownOpening(object sender, EventArgs e)
    {


            ToolStripDropDownButton btnSender = (ToolStripDropDownButton)sender;
            Point ptLowerRight = new Point(btnSender.Bounds.Right, btnSender.Bounds.Bottom);
            ptLowerRight = PointToScreen(ptLowerRight);
            contextMenuStrip.Show(ptLowerRight);
    }

答案 6 :(得分:0)

 contextMenuStrip1.Show(button1.PointToScreen(new Point(0, button1.Height)));

要在按钮正下方显示MenuStrip

答案 7 :(得分:0)

似乎已经有了正确的答案,但我认为这可能更漂亮:

private void button_Click(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    menuStrip.Show(btn, new Point(0, 0)); // offset from the edge of your button
}

答案 8 :(得分:0)

以下解决方案适用于大多数控制

contextMenuStrip1.Show(sender,sender.Location)

答案 9 :(得分:-1)

简单方法

  

contextMenuStrip1.Show(Button1的,   Button1.PointToClient(Cursor.Position));