Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to show contextmenustrip when a button is clicked in the right position

I want to click on a button and have it show a ContextMenuStrip right below the button. It keeps showing up in the left hand side of the screen when i try PointToScreen and top and left coordinates.

Any suggestions?

like image 377
leora Avatar asked Oct 11 '09 04:10

leora


5 Answers

I know this is an old question but I think it may help other people. Following code will display the context menu just below the button being clicked and the button will look like a dropdown button.

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);
}
like image 59
A J Qarshi Avatar answered Oct 17 '22 19:10

A J Qarshi


I figured it out:

layoutMenus.Show(Cursor.Position.X, Cursor.Position.Y);
like image 39
leora Avatar answered Oct 17 '22 20:10

leora


ContexMenuName under button, aligned to the right side of button (expands to below button and to the left): ContexMenuName.Show(ButtonName, new Point(ButtonName.Width - ContexMenuName.Width, ButtonName.Height)); Hope this will help sb :)

like image 32
saper_2 Avatar answered Oct 17 '22 20:10

saper_2


As far as I know the code you require was here:

// On the right of the button

ContextMenuName.Show(ButtonName.Left + ButtonName.Width + this.Left, ButtonName.Top + this.Top);

At the bottom of the button

ContextMenuName.Show(ButtonName.Left + this.Left, ButtonName.Top + ButtonName.Height + this.Top);

At the bottom right of the button

ContextMenuName.Show(ButtonName.Left + ButtonName.Width + this.Left, ButtonName.Top + ButtonName.Height + this.Top);
like image 41
lllllllllllllIllllIll Avatar answered Oct 17 '22 20:10

lllllllllllllIllllIll


Make sure that when you're positioning the context menu that you pass it the correct screen coordinates. You'll need to use something like Control.PointToScreen, using the x, y, coordinates based on the position of the control in its parent.

like image 1
Michael Todd Avatar answered Oct 17 '22 21:10

Michael Todd