2

我正在使用 a DataGridViewDataGridViewComboBoxColumn我需要在组合框项目的左侧添加图标。我目前正在使用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消失。

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

4

1 回答 1

2

在您的 CellPainting 事件中,您可以尝试在现有控件上进行绘画:

e.PaintBackground(e.ClipBounds, true);
e.PaintContents(e.ClipBounds);

//Draw your stuff

e.Handled = true;

或查看方法ComboBoxRenderer的类DrawDropDownButtonControlPaint.DrawComboButton或非视觉样式)。

于 2011-09-20T13:44:30.893 回答