自定义绘制DatagridViewComboBoxColumn
我正在使用带有DataGridView
的DataGridViewComboBoxColumn
,我需要在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
)。