Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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 tried 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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
226 views
Welcome To Ask or Share your Answers For Others

1 Answer

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).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...