我正在使用 DataGridView
和 DataGridViewComboBoxColumn
,并且我需要在组合框项目的左侧添加图标。我目前正在使用 EditingControlShowing
事件和 ComboBox.DrawItem
事件,如下所示:
private void pFiles_dgvFiles_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is ComboBox)
{
ComboBox cb = (ComboBox)e.Control;
cb.DrawMode = DrawMode.OwnerDrawFixed;
cb.DrawItem -= combobox1_DrawItem;
cb.DrawItem += combobox1_DrawItem;
}
}
private void combobox1_DrawItem(object sender, DrawItemEventArgs e)
{
// Drawing icon here
}
问题是只有当单元格处于编辑模式时才会绘制图标。一旦我单击单元格外部的某个位置,CellEndEdit
事件就会被触发,并且单元格将被重新绘制(没有图标)。
我尝试使用 DataGridView.CellPainting
事件来解决此问题,但它导致 DataGridViewComboBoxColumn
的下拉按钮消失。
关于如何在用户完成编辑单元格后绘制图标有什么想法吗?
最佳答案
在 CellPainting 事件中,您可以尝试在现有控件上绘画:
e.PaintBackground(e.ClipBounds, true);
e.PaintContents(e.ClipBounds);
//Draw your stuff
e.Handled = true;
或者查看ComboBoxRenderer
类中的DrawDropDownButton
方法(或ControlPaint.DrawComboButton
用于非视觉样式)。
关于c# - DatagridViewComboBoxColumn 的自定义绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7482534/