Winform中DataGridView下拉框单元格错误时,改变背景色,作为提示
在错误的条件时,更改cell.Style.BackColor的背景颜色
/// <summary> /// 单元格字体颜色 /// </summary> Color cellForeColor = Color.Black; /// <summary> /// 单元格背景正常颜色 /// </summary> Color cellNomalColor = Color.White; /// <summary> /// 单元格背景错误颜色 /// </summary> Color cellErrorColor = Color.Red; /// <summary> /// 编辑单元格 /// </summary> private void dgvGroupConfig_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { isDrawToString = false; if (e.Control is DataGridViewComboBoxEditingControl cb) { cb.DropDownStyle = ComboBoxStyle.DropDownList; cb.DrawMode = DrawMode.OwnerDrawFixed; cb.DrawItem -= Cb_DrawItem; cb.DrawItem += Cb_DrawItem; } var dgv = sender as DataGridView; if (dgv.CurrentCell.ColumnIndex == cbxDriller.Index || dgv.CurrentCell.ColumnIndex == cbxSupervisor.Index) { isDrawToString = true; } } bool isDrawToString = false; /// <summary> /// 单元格重绘 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Cb_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index < 0) { return; } if (sender is DataGridViewComboBoxEditingControl cb) { cb.BackColor = cellNomalColor; string value = cb.GetItemText(cb.Items[e.Index]); if (isDrawToString) value = cb.Items[e.Index].ToString(); using (Brush foreBrush = new SolidBrush(cellForeColor)) using (Brush backBrush = new SolidBrush(cb.BackColor)) { e.Graphics.FillRectangle(backBrush, e.Bounds); e.DrawBackground(); e.DrawFocusRectangle(); e.Graphics.DrawString(value, cb.Font, foreBrush, e.Bounds); } } } /// <summary> /// 重新编写单元格绘制函数 /// </summary> private void dgvGroupConfig_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { var dgv = sender as DataGridView; if (e.ColumnIndex < 0 || e.RowIndex < 0) { return; } if (dgv.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewComboBoxCell cell) { e.Paint(e.ClipBounds, DataGridViewPaintParts.Border); e.Paint(e.ClipBounds, DataGridViewPaintParts.ContentBackground); using (Brush foreBrush = new SolidBrush(cellForeColor)) using (Brush backBrush = new SolidBrush(cell.Style.BackColor)) using (StringFormat format = new StringFormat()) { Rectangle rect = new Rectangle(e.CellBounds.X + 1, e.CellBounds.Y + 1, e.CellBounds.Width - 19, e.CellBounds.Height - 3); format.LineAlignment = StringAlignment.Center; e.Graphics.FillRectangle(backBrush, rect); e.Graphics.DrawString(cell.FormattedValue.ToString(), e.CellStyle.Font, foreBrush, rect, format); } e.Paint(e.ClipBounds, DataGridViewPaintParts.ErrorIcon); e.Paint(e.ClipBounds, DataGridViewPaintParts.Focus); e.Handled = true; } }
凡所有相,皆是虚妄。