0

我正在开发一个使用 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 中的图形/绘画非常陌生。现在我没有想法了,我希望你能来一些新鲜的

错误的绘画

4

1 回答 1

0

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

于 2013-10-10T07:49:33.067 回答