16

我想单击一个按钮并让它显示ContextMenuStrip在按钮的正下方。PointToScreen当我尝试上下坐标时,它一直显示在屏幕的左侧。

有什么建议么?

4

10 回答 10

41

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

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);
}
于 2011-11-28T22:35:32.893 回答
29

我想到了:

layoutMenus.Show(Cursor.Position.X, Cursor.Position.Y);
于 2009-10-11T04:31:26.757 回答
6

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

于 2015-03-31T20:38:53.643 回答
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);
于 2013-07-30T12:41:15.157 回答
1

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

于 2009-10-11T04:15:42.293 回答
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);
    }
于 2014-03-31T13:10:21.677 回答
0
 contextMenuStrip1.Show(button1.PointToScreen(new Point(0, button1.Height)));

在按钮下方显示 MenuStrip

于 2019-09-07T08:57:16.670 回答
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
}
于 2021-05-11T19:05:53.070 回答
0

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

contextMenuStrip1.Show(sender,sender.Location)
于 2021-05-31T04:48:18.010 回答
-1

简单的方法

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

于 2013-03-11T16:53:42.517 回答