自定义绘制DatagridViewComboBoxColumn
本文关键字:DatagridViewComboBoxColumn 绘制 自定义 | 更新日期: 2023-09-27 18:09:10
我使用的是DataGridView
和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
事件来解决这个问题,但它会导致DataGridViewComboBoxColumn
的下拉按钮消失。
关于如何在用户完成编辑单元格后绘制图标的任何想法?
在CellPainting事件中,您可以尝试在现有控件上绘制:
e.PaintBackground(e.ClipBounds, true);
e.PaintContents(e.ClipBounds);
//Draw your stuff
e.Handled = true;
或查看ComboBoxRenderer
类的DrawDropDownButton
方法(或ControlPaint.DrawComboButton
非视觉样式)。