自定义绘制DatagridViewComboBoxColumn

时间:2011-09-20 08:56:06

标签: c# winforms datagridview datagridviewcomboboxcell custom-draw

我正在使用带有DataGridView的{​​{1}},我需要在组合框项目的左侧添加图标。我目前正在使用DataGridViewComboBoxColumn事件以及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的下拉按钮消失。

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

1 个答案:

答案 0 :(得分:2)

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

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

//Draw your stuff

e.Handled = true;

或查看ComboBoxRenderer类以查找DrawDropDownButton方法(或ControlPaint.DrawComboButton查看非视觉样式。)