I'm using a DataGridView
with a DataGridViewComboBoxColumn
and I need to add icons to the left of combobox items. I'm currently using EditingControlShowing
event along with ComboBox.DrawItem
event, like this:
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
}
The problem is icons are only drawn as long as the cell is in edit mode. As soon as I click somewhere outside the cell the CellEndEdit
event is fired and the cell gets repainted (without the icon).
I trie开发者_开发百科d using the DataGridView.CellPainting
event to resolve this issue, but it causes the dropdown button of the DataGridViewComboBoxColumn
to disappear.
Any ideas on how to draw an icon after the user finished editing the cell?
In you CellPainting event, you can try painting over the existing controls:
e.PaintBackground(e.ClipBounds, true);
e.PaintContents(e.ClipBounds);
//Draw your stuff
e.Handled = true;
or look into ComboBoxRenderer
class for the DrawDropDownButton
method (or ControlPaint.DrawComboButton
for non-visual styles).
精彩评论