private void C_PropertyGrid_PropertyValueChanged(object s, System.Windows.Forms.PropertyValueChangedEventArgs e)
        {
            if (_CurSelectedButton != null)
            {
                ButtonTags thistag = (ButtonTags)_CurSelectedButton.Tag;

                this._CurSelectedButton.Text = thistag.filter.FilterName;
            }
        }
        private void MyMouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            moveArgs = e;

            #region origin move
            Control lCtrl = (sender as Control);
            if (!(lCtrl is Button))
            {
                return;
            }

            btntag = (ButtonTags)lCtrl.Tag;
            int rowindex = btntag.RowIndex;
            int colindex = btntag.ColIndex;
            int rowmax   = btntag.RowMax;
            int colmax   = btntag.ColMax;

            if (moveArgs.Button == MouseButtons.Left)
            {
                switch (m_MousePointPosition)
                {
                case EnumMousePointPosition.MouseSizeBottom:
                    if (rowindex >= rowmax)
                    {
                        return;
                    }
                    if (lCtrl.Height + (moveArgs.Y - p1.Y) <= MinHeight)
                    {
                        return;
                    }
                    if (Buttons[rowindex + 1][colindex].Height - moveArgs.Y + p1.Y <= MinHeight)
                    {
                        return;
                    }

                    foreach (Button btn in Buttons[rowindex])
                    {
                        btn.Height += (moveArgs.Y - p1.Y);

                        btntag = (ButtonTags)btn.Tag;
                        btntag.btnSize.Height = btn.Height;
                        btn.Tag = btntag;
                    }
                    foreach (Button btn in Buttons[rowindex + 1])
                    {
                        //btn.Top += (moveArgs.Y - p1.Y);
                        btn.Height -= (moveArgs.Y - p1.Y);

                        btntag                = (ButtonTags)btn.Tag;
                        btntag.btnLoc.Y       = btn.Top;
                        btntag.btnSize.Height = btn.Height;
                        btn.Tag               = btntag;
                    }
                    this.btnContainer[rowindex].Height += (moveArgs.Y - p1.Y);
                    btnContainer[rowindex + 1].Top     += (moveArgs.Y - p1.Y);
                    btnContainer[rowindex + 1].Height  -= (moveArgs.Y - p1.Y);
                    btnContainer[rowindex + 1].Refresh();
                    btnContainer[rowindex].Refresh();

                    p1.X = moveArgs.X;
                    p1.Y = moveArgs.Y;         //'记录光标拖动的当前点
                    break;

                case EnumMousePointPosition.MouseSizeRight:
                    if (colindex >= colmax)
                    {
                        return;
                    }
                    if (Buttons[rowindex][colindex + 1].Width - moveArgs.X + p1.X <= MinWidth)
                    {
                        return;
                    }
                    if (lCtrl.Width + moveArgs.X - p1.X <= MinWidth)
                    {
                        return;
                    }

                    lCtrl.Width = lCtrl.Width + moveArgs.X - p1.X;

                    btntag = (ButtonTags)lCtrl.Tag;
                    btntag.btnSize.Width = lCtrl.Width;
                    lCtrl.Tag            = btntag;

                    Buttons[rowindex][colindex + 1].Left  += moveArgs.X - p1.X;
                    Buttons[rowindex][colindex + 1].Width -= moveArgs.X - p1.X;

                    btntag               = (ButtonTags)Buttons[rowindex][colindex + 1].Tag;
                    btntag.btnLoc.X      = Buttons[rowindex][colindex + 1].Left;
                    btntag.btnSize.Width = Buttons[rowindex][colindex + 1].Width;
                    Buttons[rowindex][colindex + 1].Tag = btntag;

                    p1.X = moveArgs.X;
                    p1.Y = moveArgs.Y;         //'记录光标拖动的当前点

                    lCtrl.Refresh();
                    Buttons[rowindex][colindex + 1].Refresh();

                    break;

                case EnumMousePointPosition.MouseSizeTop:
                    if (rowindex <= 0)
                    {
                        return;
                    }
                    if (lCtrl.Height - (moveArgs.Y - p.Y) <= MinHeight)
                    {
                        return;
                    }
                    if (Buttons[rowindex - 1][colindex].Height + moveArgs.Y - p.Y <= MinHeight)
                    {
                        return;
                    }


                    foreach (Button btn in Buttons[rowindex - 1])
                    {
                        btn.Height += (moveArgs.Y - p.Y);

                        btntag = (ButtonTags)btn.Tag;
                        btntag.btnSize.Height = btn.Height;
                        btn.Tag = btntag;
                    }



                    foreach (Button btn in Buttons[rowindex])
                    {
                        //btn.Top += (moveArgs.Y - p.Y);
                        btn.Height -= (moveArgs.Y - p.Y);

                        btntag                = (ButtonTags)btn.Tag;
                        btntag.btnLoc.Y       = btn.Top;
                        btntag.btnSize.Height = btn.Height;
                        btn.Tag               = btntag;
                    }
                    btnContainer[rowindex - 1].Height += (moveArgs.Y - p.Y);
                    btnContainer[rowindex - 1].Refresh();
                    btnContainer[rowindex].Top    += (moveArgs.Y - p.Y);
                    btnContainer[rowindex].Height -= (moveArgs.Y - p.Y);
                    btnContainer[rowindex].Refresh();
                    break;

                case EnumMousePointPosition.MouseSizeLeft:
                    if (colindex <= 0)
                    {
                        return;
                    }
                    if (Buttons[rowindex][colindex - 1].Width + moveArgs.X - p1.X <= MinWidth)
                    {
                        return;
                    }
                    if (lCtrl.Width - (moveArgs.X - p.X) <= MinWidth)
                    {
                        return;
                    }

                    Buttons[rowindex][colindex - 1].Width += moveArgs.X - p1.X;

                    btntag = (ButtonTags)Buttons[rowindex][colindex - 1].Tag;
                    btntag.btnSize.Width = Buttons[rowindex][colindex - 1].Width;
                    Buttons[rowindex][colindex - 1].Tag = btntag;
                    Buttons[rowindex][colindex - 1].Refresh();

                    lCtrl.Left  = lCtrl.Left + moveArgs.X - p.X;
                    lCtrl.Width = lCtrl.Width - (moveArgs.X - p.X);


                    btntag               = (ButtonTags)lCtrl.Tag;
                    btntag.btnLoc.X      = lCtrl.Left;
                    btntag.btnSize.Width = lCtrl.Width;
                    lCtrl.Tag            = btntag;
                    lCtrl.Refresh();

                    break;

                default:
                    break;
                }
            }

            else
            {
                m_MousePointPosition = MousePointPosition(lCtrl.Size, e); //'判断光标的位置状态
                switch (m_MousePointPosition)                             //'改变光标
                {
                case EnumMousePointPosition.MouseSizeNone:
                    mainControl.Cursor = Cursors.Arrow;               //'箭头
                    break;

                case EnumMousePointPosition.MouseDrag:
                    mainControl.Cursor = Cursors.Arrow;             //'四方向
                    break;

                case EnumMousePointPosition.MouseSizeBottom:
                    if (rowindex < rowmax)
                    {
                        mainControl.Cursor = Cursors.SizeNS;              //'南北
                    }
                    break;

                case EnumMousePointPosition.MouseSizeTop:
                    if (rowindex > 0)
                    {
                        mainControl.Cursor = Cursors.SizeNS;              //'南北
                    }
                    break;

                case EnumMousePointPosition.MouseSizeLeft:
                    if (colindex > 0)
                    {
                        mainControl.Cursor = Cursors.SizeWE;              //'东西
                    }
                    break;

                case EnumMousePointPosition.MouseSizeRight:
                    if (colindex < colmax)
                    {
                        mainControl.Cursor = Cursors.SizeWE;              //'东西
                    }
                    break;

                default:
                    break;
                }
            }
            #endregion
        }
//        public void LoadLayout(FieldLayOut layout, Control ctnControl, SectionFilterCollection sfcfilter, System.Windows.Forms.PropertyGrid propertyGrid)
        public void LoadLayout(FieldLayOut layout, SectionFilterCollection sections)
        {
            if (layout == null || layout.FieldTable == null)
            {
                return;
            }

            _layout = layout;

            Int32Collection nCols = _layout.ColumnsEachRow;

            int nRowCount = nCols.Count;

            if (nRowCount <= 0 || !LoadSectionFilters(nCols, sections))
            {
                return;
            }

            mainControl.Controls.Clear();

            Rectangle rect = mainControl.ClientRectangle;

            mainControl.BackColor = Control.DefaultBackColor;

            this.C_PropertyGrid.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.C_PropertyGrid_PropertyValueChanged);

            Buttons = new Button[nRowCount][];

            btnContainer = new Panel[nRowCount];

            int sfcindex = 0;


            int panelLocX     = rect.X;
            int panelLocY     = rect.Y;
            int nButtonHeight = 0;

            for (int i = 0; i < nRowCount; i++)
            {
                panelLocY    += nButtonHeight;
                nButtonHeight = (int)(rect.Height * this.GetMaxRadio(layout, i));

                btnContainer[i]             = new Panel();
                btnContainer[i].Name        = i.ToString();
                btnContainer[i].Location    = new Point(panelLocX, panelLocY);
                btnContainer[i].Size        = new Size(rect.Width, nButtonHeight);
                btnContainer[i].BorderStyle = BorderStyle.None;

                int iColCount = nCols[i];
                if (iColCount > 0)
                {
                    Buttons[i] = new Button[iColCount];
                }

                int buttonLocX = 0;

                int restWidth = this.GetRestWidth(i);               //Added this code at 2008-12-12 13:58:28@Simon

                for (int j = 0; j < iColCount; j++)
                {
                    Button newButton = new Button();
                    newButton.Location = new Point(buttonLocX, 0);
                    newButton.Size     = this.GetButtonSize(i, j);
                    if (restWidth > 0)
                    {
                        newButton.Width += 1;
                        restWidth--;
                    }
                    else if (restWidth < 0)
                    {
                        newButton.Width -= 1;
                        restWidth++;
                    }
                    buttonLocX         += newButton.Size.Width;
                    newButton.BackColor = Control.DefaultBackColor;


                    btntag          = new ButtonTags();
                    btntag.RowIndex = i;
                    btntag.ColIndex = j;
                    btntag.RowMax   = nRowCount - 1;
                    btntag.ColMax   = nRowCount - 1;
                    btntag.btnLoc   = new Point(newButton.Location.X, newButton.Location.X);
                    btntag.btnSize  = new Size(newButton.Width, newButton.Height);
                    btntag.filter   = sections[sfcindex];

                    sfcindex++;
                    newButton.Name = string.Format("Button{0}", sfcindex);
                    newButton.Text = btntag.filter.FilterName;
                    newButton.Tag  = btntag;



                    newButton.MouseDown  += new System.Windows.Forms.MouseEventHandler(MyMouseDown);
                    newButton.MouseLeave += new System.EventHandler(MyMouseLeave);
                    newButton.MouseMove  += new System.Windows.Forms.MouseEventHandler(MyMouseMove);
                    newButton.Click      += new System.EventHandler(MyClick);

                    Buttons[i][j] = newButton;
                    btnContainer[i].Controls.Add(newButton);
                }
                this.mainControl.Controls.Add(btnContainer[i]);
            }
        }