我想单击一个按钮并让它显示ContextMenuStrip
在按钮的正下方。PointToScreen
当我尝试上下坐标时,它一直显示在屏幕的左侧。
有什么建议么?
我想单击一个按钮并让它显示ContextMenuStrip
在按钮的正下方。PointToScreen
当我尝试上下坐标时,它一直显示在屏幕的左侧。
有什么建议么?
我知道这是一个老问题,但我认为它可能对其他人有所帮助。以下代码将在单击的按钮下方显示上下文菜单,并且该按钮看起来像一个下拉按钮。
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);
}
我想到了:
layoutMenus.Show(Cursor.Position.X, Cursor.Position.Y);
按钮下的 ContexMenuName,与按钮的右侧对齐(扩展到按钮下方和左侧):
ContexMenuName.Show(ButtonName, new Point(ButtonName.Width - ContexMenuName.Width, ButtonName.Height));
希望这会有所帮助 :)
据我所知,您需要的代码在这里:
// 在按钮的右边
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);
确保在定位上下文菜单时传递正确的屏幕坐标。您需要使用 Control.PointToScreen 之类的东西,使用基于控件在其父控件中的位置的 x、y 坐标。
我有 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);
}
contextMenuStrip1.Show(button1.PointToScreen(new Point(0, button1.Height)));
在按钮下方显示 MenuStrip
似乎已经有一个正确的答案,但我认为这可能更漂亮一点:
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
}
以下解决方案可用于大多数控制
contextMenuStrip1.Show(sender,sender.Location)
简单的方法
contextMenuStrip1.Show(Button1, Button1.PointToClient(Cursor.Position));