출처 : 본인
//사용법
PopupPanel(this, this.PointToClient(Cursor.Position), ctrl);
// 소스
public static void PopupPanel(Control backGround, Point point, Control popupCtrl)
{
// 창의 크기를 확인한다
// 현재 위치를 기준으로 우하단, 우상단, 좌하단, 좌상단에 대해서 창을 띄울 시 벗어나는지 확인한다
// 벗어나지 않으면 띄운다.
// 모두 벗어나면 우하단으로 띄운다.
int bWidth = backGround.Width;
int bHeight = backGround.Height - 30;
int pTop = point.Y;
int pLeft = point.X;
if (bWidth > pLeft + popupCtrl.Width && bHeight > pTop + popupCtrl.Height)
{
//우하단
popupCtrl.Top = pTop + 5;
popupCtrl.Left = pLeft + 5;
}
else if (bWidth > pLeft + popupCtrl.Width && 0 < pTop - popupCtrl.Height)
{
//우상단
popupCtrl.Top = pTop - popupCtrl.Height - 5;
popupCtrl.Left = pLeft + 5;
}
else if (0 < pLeft - popupCtrl.Width && bHeight > pTop + popupCtrl.Height)
{
//좌하단
popupCtrl.Top = pTop + 5;
popupCtrl.Left = pLeft - popupCtrl.Width - 5;
}
else if (0 < pLeft - popupCtrl.Width && 0 < pTop - popupCtrl.Height)
{
//좌상단
popupCtrl.Top = pTop - popupCtrl.Height - 5;
popupCtrl.Left = pLeft - popupCtrl.Width - 5;
}
else
{
//우하단
popupCtrl.Top = pTop;
popupCtrl.Left = pLeft;
}
popupCtrl.BringToFront();
popupCtrl.Visible = true;
}