自定义绘制DatagridViewComboBoxColumn

本文关键字:DatagridViewComboBoxColumn 绘制 自定义 | 更新日期: 2023-09-27 18:09:10

我使用的是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的下拉按钮消失。

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

自定义绘制DatagridViewComboBoxColumn

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

e.PaintBackground(e.ClipBounds, true);
e.PaintContents(e.ClipBounds);
//Draw your stuff
e.Handled = true;

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

相关文章:
  • 没有找到相关文章