DatagridViewComboBoxColumn的自定义绘制 [英] Custom draw of DatagridViewComboBoxColumn
问题描述
我使用的是 DataGridView的
与 DataGridViewComboBoxColumn
,我需要图标添加到组合框的项目左。我目前使用 EditingControlShowing
事件与 ComboBox.DrawItem
事件一起,像这样的:
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
}
问题是图标仅只要该细胞处于编辑模式绘制。当我单击单元格之外的某处的 CellEndEdit
事件被激发,细胞被重新粉刷(没有图标)。
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).
我尝试使用 DataGridView.CellPainting
事件来解决这个问题,但它会导致 DataGridViewComboBoxColumn
消失。
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?
推荐答案
在你CellPainting情况下,可以尝试在现有的管制画:
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;
或看看 ComboBoxRenderer
类的 DrawDropDownButton
方法(或 ControlPaint.DrawComboButton
非视觉样式)。
or look into ComboBoxRenderer
class for the DrawDropDownButton
method (or ControlPaint.DrawComboButton
for non-visual styles).
这篇关于DatagridViewComboBoxColumn的自定义绘制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!