|
分類:[C# (Windows)]
こんにちは。 DataGridView を2つ上下にならべ上がデータ表示、下が合計表示しています。 データが多い場合は大丈夫なのですが、少ない場合、 DataGridView の背景にセルの幅に合わせて縦ラインを引きたいと考えてます。
そこで、Scroll イベントで背景を一度塗りつぶしてから、ラインを引いたのですが 素早くスクロールを行うと、うまくラインが描画されません。
ソースにTrace.WriteLineを埋め込んで引いたライン数を数えてみると、きちんとラインを引いているようなので 描画が追いついていないような動作です。
何とか上手く動作させたいのですが、どなたかご教授いただけないでしょうか?
下記は作成したソースになります。 なお、開発環境はWindowsXP SP2、Visual Studio 2005 になりServicePack1は当てておりません。
Graphics graphics = this.dataGridView.CreateGraphics();
//カラムの幅(セルのcolumnのWidthは全て同一) int columnWidth = dataGridView.Columns[0].Width;
//ラインを描画する際の上端と下端(セルのRowのHeightは全て同一) int yBackgroundTop = dataGridView.ColumnHeadersHeight + dataGridView.RowCount * dataGridView.Rows[0].Height - dataGridView.VerticalScrollingOffset + 1; int yBackgroundBottom = dataGridView.Height;
//一番左端のラインのX座標の取得 int x; if (dataGridView.FirstDisplayedScrollingColumnHiddenWidth == 0) { x = dataGridView.RowHeadersWidth; } else { x = columnWidth - dataGridView.FirstDisplayedScrollingColumnHiddenWidth + dataGridView.RowHeadersWidth; }
//一度、四角形で塗りつぶす。 graphics.FillRectangle(Brushes.Gray, dataGridView.FirstDisplayedScrollingColumnHiddenWidth, yBackgroundTop, dataGridView.Width, yBackgroundBottom);
//ラインを引く while (x < dataGridView.Width) { graphics.DrawLine(new Pen(Color.DarkGray), x, yBackgroundTop, x, yBackgroundBottom); x += columnWidth; }
|