상세 컨텐츠

본문 제목

TableLayoutPanel Position 얻기

C#

by 탑~! 2013. 4. 16. 17:59

본문



GetCellPosotion.txt


private TableLayoutPanelCellPosition GetCellPosotion(TableLayoutPanel panel)

        {

            //mouse position

            //Point p = panel.PointToClient(Control.MousePosition);

            Point p = panel.PointToClient(Cursor.Position);


            //Cell position

            TableLayoutPanelCellPosition pos = new TableLayoutPanelCellPosition(0, 0);

            //Panel size.

            Size size = panel.Size;

            //average cell size.

            SizeF cellAutoSize = new SizeF(size.Width / panel.ColumnCount, size.Height / panel.RowCount);


            //Get the cell row.

            //y coordinate

            float y = 0;

            for (int i = 0; i < panel.RowCount; i++)

            {

                //Calculate the summary of the row heights.

                SizeType type = panel.RowStyles[i].SizeType;

                float height = panel.RowStyles[i].Height;

                switch (type)

                {

                    case SizeType.Absolute:

                        y += height;

                        break;

                    case SizeType.Percent:

                        y += height / 100 * size.Height;

                        break;

                    case SizeType.AutoSize:

                        y += cellAutoSize.Height;

                        break;

                }

                //Check the mouse position to decide if the cell is in current row.

                if ((int)y > p.Y)

                {

                    pos.Row = i;

                    break;

                }

            }


            //Get the cell column.

            //x coordinate

            float x = 0;

            for (int i = 0; i < panel.ColumnCount; i++)

            {

                //Calculate the summary of the row widths.

                SizeType type = panel.ColumnStyles[i].SizeType;

                float width = panel.ColumnStyles[i].Width;

                switch (type)

                {

                    case SizeType.Absolute:

                        x += width;

                        break;

                    case SizeType.Percent:

                        x += width / 100 * size.Width;

                        break;

                    case SizeType.AutoSize:

                        x += cellAutoSize.Width;

                        break;

                }

                //Check the mouse position to decide if the cell is in current column.

                if ((int)x > p.X)

                {

                    pos.Column = i;

                    break;

                }

            }


            //return the mouse position.

            return pos;

        }

'C#' 카테고리의 다른 글

Keyboard Hooking  (0) 2013.04.17
Mouse Hooking  (0) 2013.04.17
코드로 관리자 권한 상승 시키기  (0) 2013.03.29
Binary File Read & Write  (0) 2013.03.27
StopWatch  (0) 2013.03.27

관련글 더보기