как показать 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);
}

Я понял это:

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

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);
    }

легко

contextMenuStrip1.Показать(Кнопка Button1, Кнопка button1.PointToClient(Курсор.Позиция));