在DataGridView中自定义绘制,奇怪的视觉外观

时间:2013-10-09 19:51:47

标签: c++ datagridview command-line-interface repaint

我正在开发一个使用datagridview来显示某些数据的应用程序。数据按逻辑结构四乘四。为了使其可视化,我想在datagridview中的每第四行绘制一条线/边框。

我通过编写以下RowPostPaint方法(剥离批量代码)来完成此操作

System::Void dataGridView1_RowPostPaint(System::Object^  sender, Forms::DataGridViewRowPostPaintEventArgs^  e) {

    A = ...

    Rectangle rowBorder  = dataGridView1->GetRowDisplayRectangle(e->RowIndex,true);

    if(A->ID % 4 == 0){
        e->Graphics->DrawLine(gcnew Pen(Drawing::Color::Black),(float)
        rowBorder.X ,(float)(rowBorder.Y + rowBorder.Height-2), (float) rowBorder.X +
        rowBorder.Width  ,(float) (rowBorder.Y + rowBorder.Height-2) );
    }
} 

出于某种原因,当我使用滚动条或调整窗口大小时,绘画会被破坏(显示比应有的更多行,请参见图片)。例如,通过选择受影响的行强制重绘会使错误行消失。

我已经尝试了几个提示(双缓冲,剪辑等)来解决这个问题,但我还没有这样做。 正如你可能已经想到的那样,我对c ++ / cli中的图形/绘画很陌生。 现在我没有想法,我希望你能带来一些新鲜的想法

Errornous painting

1 个答案:

答案 0 :(得分:0)

我通过在每行的顶部而不是在底部绘画来解决问题。创建工件是因为我使用行高来确定行中绘制线的位置。 (如果部分显示底部的行,则行高也会受到影响。)

相关问题