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]); } }