как показать contextmenustrip при нажатии кнопки в правильном положении
Я хочу нажать на кнопку и показать contextmenustrip прямо под кнопкой. он продолжает отображаться в левой части экрана, когда я пытаюсь pointtoacreen и верхние и левые координаты.
предложения
7 ответов
Я знаю, это старый вопрос, но я думаю, что это может помочь другим людям. Следующий код отобразит контекстное меню чуть ниже нажатой кнопки, и кнопка будет выглядеть как раскрывающаяся кнопка.
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);
убедитесь, что при позиционировании контекстного меню вы передаете ему правильные координаты экрана. Вам нужно будет использовать что-то вроде контроля.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);
}