출처 : 본인


//사용법

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;

 

}

















Posted by motolies
,