Ответ 1
Я понял:
layoutMenus.Show(Cursor.Position.X, Cursor.Position.Y);
Я хочу нажать на кнопку, чтобы она показала ContextMenuStrip
прямо под кнопкой. Он продолжает появляться в левой части экрана, когда я пытаюсь PointToScreen
и верхнюю и левую координаты.
Какие-либо предложения?
Я понял:
layoutMenus.Show(Cursor.Position.X, Cursor.Position.Y);
Я знаю, что это старый вопрос, но я думаю, что это может помочь другим людям. Следующий код отобразит контекстное меню чуть ниже нажатой кнопки, и кнопка будет выглядеть как выпадающая кнопка.
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);
}
ContexMenuName под кнопкой, выровненной с правой стороны кнопки (расширяется до кнопки внизу и влево):
ContexMenuName.Show(ButtonName, new Point(ButtonName.Width - ContexMenuName.Width, ButtonName.Height));
Надеюсь, это поможет sb:)
Насколько я знаю, код, который вам нужен, был здесь:
//Справа от кнопки
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 прямо под кнопкой
Простой способ
contextMenuStrip1.Show(Button1, Button1.PointToClient(Cursor.Position));