我正在开发一个使用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中的图形/绘画很陌生。 现在我没有想法,我希望你能带来一些新鲜的想法
答案 0 :(得分:0)
我通过在每行的顶部而不是在底部绘画来解决问题。创建工件是因为我使用行高来确定行中绘制线的位置。 (如果部分显示底部的行,则行高也会受到影响。)