protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { //此段代码主要解决xp下,如果鼠标默认在按钮列上,按钮的默认绘制样式问题 if (this.m_firstDraw) { this.m_firstDraw = false; this.m_curBtnState = this.Enabled ? PushButtonState.Normal : PushButtonState.Disabled; } // 是否需要重绘单元格的背景颜色 m_brushCellBack = this.DataGridView.SelectedCells.Contains(this) ? new SolidBrush(cellStyle.SelectionBackColor) : new SolidBrush(cellStyle.BackColor); graphics.FillRectangle(m_brushCellBack, cellBounds.X, cellBounds.Y, cellBounds.Width, cellBounds.Height); //计算button的区域 m_buttonRegion = RectangleCommon.GetSmallRectOfRectangle(cellBounds, this.Size, out this.m_absBtnRegion); //绘制按钮 if (m_enabled) { this.InternalDrawButton(graphics, m_buttonRegion, m_curBtnState, Text); } else { this.InternalDrawButton(graphics, m_buttonRegion, PushButtonState.Disabled, Text); } // 填充单元格的边框 base.PaintBorder(graphics, clipBounds, cellBounds, cellStyle, advancedBorderStyle); }
/// <summary> /// 是否在Button按钮区域 /// </summary> /// <param name="p"></param> /// <returns></returns> protected bool IsInRegion(Point p, int columnIndex, int rowIndex) { Rectangle cellBounds = DataGridView[columnIndex, rowIndex].ContentBounds; RectangleCommon.GetSmallRectOfRectangle(cellBounds, this.Size, out this.m_absBtnRegion); return(this.m_absBtnRegion.Contains(p)); }
protected override void Paint(System.Drawing.Graphics graphics, System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int rowIndex, DataGridViewElementStates dataGridViewElementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { base.Paint(graphics, clipBounds, cellBounds, rowIndex, dataGridViewElementState, @"", @"", errorText, cellStyle, advancedBorderStyle, paintParts); this.m_chkboxRegion = RectangleCommon.GetSmallRectOfRectangle(cellBounds, CheckBoxRenderer.GetGlyphSize(graphics, CheckBoxState.UncheckedNormal), out m_absChkboxRegion); this.RenderCheckBox(graphics); }