自定义绘制DatagridViewComboBoxColumn

我正在使用带有DataGridViewDataGridViewComboBoxColumn ,我需要在combobox项目的左侧添加图标。 我目前正在使用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某个地方,就会触发CellEndEdit事件并重新绘制单元格(没有图标)。

我尝试使用DataGridView.CellPainting事件来解决此问题,但它导致DataGridViewComboBoxColumn的下拉按钮消失。

在用户完成编辑单元格后如何绘制图标的任何想法?

在CellPainting事件中,您可以尝试绘制现有控件:

 e.PaintBackground(e.ClipBounds, true); e.PaintContents(e.ClipBounds); //Draw your stuff e.Handled = true; 

或者查看用于DrawDropDownButton方法的ComboBoxRenderer类(或用于非视觉样式的ControlPaint.DrawComboButton )。